2016-06-06 5 views
1

Mein Schema ist dies:MySQL IN-Klausel nicht für die Bearbeitung von Spaltennamen 'index'

CREATE TABLE `dump` (
    `index` int(20) DEFAULT NULL, 
    `uid` int(20) DEFAULT NULL, 
    `time` int(20) DEFAULT NULL, 
    `delete1` int(20) DEFAULT NULL, 
    `delete2` int(20) DEFAULT NULL, 
    `delete3` int(20) DEFAULT NULL, 
    `delete4` int(20) DEFAULT NULL, 
    `delete5` int(20) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Doch wenn ich die Abfrage ausführen:

SELECT * FROM dump WHERE 'index' IN ('1', '2', '3'); 

Nichts zurückgeführt wird. Ich bin 100% sicher, dass es Einträge mit einem Index dieser Werte gibt. Es spielt keine Rolle, ob ich die einfachen Anführungszeichen von 1,2,3 usw. lösche, sondern einen Syntaxfehler, wenn er aus dem Index entfernt wird.

+6

Verwenden Sie Backtick 'um Index – 1000111

+0

Wow zu umschließen. Diese SQL-Feinheiten ... – klvs

Antwort

0

Anstatt reservierte Schlüsselwörter als Bezeichner zu verwenden, verwenden Sie einige relevante Namen. Wenn Sie immer noch das gleiche tun wollen, legen Sie es in Backticks (``)

SELECT * FROM dump WHERE `index` IN ('1', '2', '3'); 
+0

Beachten Sie die Backticks. Sie müssen alle reservierten SQL-Wörter mit Backticks versehen, wenn Sie sie als Spalten-, Tabellen-, Trigger- oder andere Namen verwenden. –

+0

@musiclovingindiangirl - Bitte geben Sie mehr Kontext darüber, warum Ihr SQL das Problem löst. –

0

In MySql wird Index reservierten Schlüsselwort. Sie können reservierte Schlüsselwörter nicht als Spaltennamen verwenden. Ändern Sie den Namen der Indexspalte in einen anderen Namen. Es gibt einige andere Schlüsselwörter wie Einfügen, Auswählen usw. Hoffe, es wird Ihnen helfen. Danke.

+0

Sie können reservierte Wörter als Spaltennamen verwenden, Sie müssen nur Backticks um sie herum setzen, so wie er es getan hat. – Barmar

0

In MySQL, bestimmte Wörter wie SELECT, INSERT, DELETE etc. sind reservierte Wörter. Da sie eine besondere Bedeutung haben, behandelt MySQL sie als Syntaxfehler, wenn Sie sie als Tabellennamen, Spaltennamen oder andere Arten von Bezeichnern verwenden - es sei denn, Sie umgeben den Bezeichner mit Backticks.

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

1. nicht reserved words als Bezeichner

2. Verwenden Sie Backticks Verwenden Sie (falls Umbenennung ist nicht möglich)

So , basierend auf Option # 2:

SELECT * FROM dump WHERE `index` IN ('1', '2', '3'); 
Verwandte Themen