2016-07-24 23 views
0

Ich habe versucht, einen 'Insert if' Mechanismus in mysql mit einigen Bedingungen zu erstellen.MySQL - Syntaxfehler bei der Verwendung von <> in einer where-Anweisung (einfügen)

Das Thema, das ich es zu bauen folgen: MySQL INSERT IF (custom if statements)

Der gesamte Code ist, dass:

insert into qualityScore (adGroupID, keywordID, qualityScore, day, clientID) 
select 222, 212, 6, '2016-07-23', 5 
where (select qualityScore from qualityScore where adGroupID=222 and keywordID = 212 and day < '2016-07-23') <> 5 

Aber es ist ein wenig Mühe mit dem unten:

(select qualityScore from qualityScore where adGroupID=222 and keywordID = 212 and day < '2016-07-23') 

Wenn i Führen Sie dieses Stück alleine aus, es gibt so etwas zurück:

 QualityScore 
     ------------ 
     5 

Es ist ein erwartetes Ergebnis zu erhalten. Aber dann besteht das Problem, wenn ich fügen Sie den ‚<> 5‘ Teil zu kodieren:

(select qualityScore from qualityScore where adGroupID=222 and keywordID = 212 and day < '2016-07-23') <> 5 

Es gibt eine MySQL 1064 Syntaxfehlercode. Soweit ich weiß, scheint Syntax richtig und ich kann den Punkt nicht finden, der zu diesem Problem führt.

Alle Vorschläge werden geschätzt. Vielen Dank.

+0

a) Sie sind nach einer 'from' fehlt' wählen 222, 212, 6, '2016.07.23', 5' und vor the'where', dass Ihr Fehler ist 1064. b) Sie werden weitere Fehler erhalten, wenn/wenn Ihre innere Auswahl mehr als 1 Zeile zurückgibt (Es ist unklar, was Sie mit dieser inneren Abfrage erreichen wollen, wenn Sie sicher sind, dass es immer nur eine Zeile ist, wird es in Ordnung sein) – Solarflare

+0

@ Solarflare hey danke für die Erklärung. Die gesamte Abfrage funktioniert, ob es ein 'von' gibt oder nicht. Funktioniert eigentlich nicht, gibt aber keinen Fehler. Aber wie gesagt, das Problem ist die innere Abfrage. Sie gibt 5 zurück, vergleicht dieses Ergebnis jedoch nicht mit dem Teil "<> 5". – Cem

+0

Für zukünftige Referenz, erwähnen Sie immer die gesamte Fehler * Nachricht *. Der Teil über "die richtige Syntax in der Nähe von ... * etwas in Anführungszeichen *" mag Ihnen vielleicht nicht hilfreich erscheinen, liefert aber wertvolle Informationen darüber, wo der Parser etwas kontextuell Ungültiges gefunden hat, was normalerweise bedeutet, dass der Fehler zuvor bestanden hat Wenn nicht, wird die in Anführungszeichen gesetzte Zeichenfolge im Fehler angezeigt, oder die Nachricht endet mit 'near ''' (leere Zeichenfolge, was bedeutet, dass die gesamte Abfrage analysiert wurde, aber unvollständig ist, weil es keine weiteren Token mehr gibt, die der Parser glaubt falsch). –

Antwort

0

Sie können keine WHERE Klausel ohne eine FROM Klausel haben. Wenn Sie nur Literale ohne Tabelle auswählen, verwenden Sie die Dummy-Tabelle DUAL.

insert into qualityScore (adGroupID, keywordID, qualityScore, day, clientID) 
select 222, 212, 6, '2016-07-23', 5 
from DUAL 
where (select qualityScore from qualityScore where adGroupID=222 and keywordID = 212 and day < '2016-07-23') <> 5 

DEMO

+0

funktioniert immer noch nicht :( – Cem

+0

Es funktioniert für mich, ich habe eine Demo hinzugefügt. – Barmar

+0

ich denke, ich habe etwas falsch in den Tabellennamen zuvor getan. Jetzt funktioniert alles gut, vielen Dank für die Demo und ich schätze wirklich die Hilfe. – Cem

-1

Versuchen day < #2016-07-23#

Daten # am Anfang und Ende müssen.

+0

hey da dave. Es funktioniert gerade mit der Syntax. Ich habe es mit verschiedenen Datumseingaben versucht. – Cem

+0

Dies muss über ein anderes DBMS sprechen. MySQL verwendet dafür '#' nicht. – Barmar