2016-07-24 54 views
0

我試圖在一些條件下在mysql中構建'insert if'機制。MySQL - 在where語句中使用<>時的語法錯誤(插入到)

,我跟着來構建它的話題:MySQL INSERT IF (custom if statements)

整個代碼是:

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 

但有一點麻煩的下面:

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

當我單獨執行這一部分,它會返回類似如下內容:

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

這是預期的結果。

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

它返回一個MySQL 1064語法錯誤代碼:但後來當我加入到代碼的「<> 5」部分存在的問題。 據我所知,語法似乎是正確的,我找不到導致此問題的觀點。

任何建議將不勝感激。謝謝。

+0

一)你缺少後''from'選擇222,212,6, '2016年7月23日',5'和the'where'之前,也就是你的錯誤1064. b)當/如果你的內部select返回多於一行(你不清楚你想用這個內部查詢實現什麼,如果你確定它總是隻有一行,那麼它會很好) – Solarflare

+0

@ Solarflare嘿感謝解釋。整個查詢工作是否有'從'。實際上不工作,但沒有給出錯誤。但正如我所說,問題在於內部查詢。它返回5,但不會將此結果與'<> 5'部分進行比較。 – Cem

+0

爲了將來的參考,請始終提及整個錯誤*消息*。關於「在正確語法附近使用...... *引用內容」的部分可能對您看起來並不有用,但它實際上提供了關於解析器在何處遇到上下文無效的有用信息,通常意味着該錯誤在之前是正確的,如果不是,錯誤中帶引號的字符串,或者消息將以'near''結尾(空字符串,這意味着整個查詢被解析,但是不完整,因爲沒有更多的標記,解析器認爲是錯誤)。 –

回答

0

如果沒有FROM子句,則不能有WHERE子句。如果您只是選擇沒有表的文字,請使用虛擬表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

仍然不起作用:( – Cem

+0

它適用於我,我已經添加了一個演示 – Barmar

+0

我想我以前在表名中做了錯誤的事情現在一切正常,非常感謝您的演示和我真的很感謝幫助。 – Cem

-1

嘗試day < #2016-07-23#

日期需要在#的開始和結束。

+0

嘿,戴夫。它現在適用於''語法。我試過用不同的日期輸入。 – Cem

+0

這一定是在談論不同的DBMS。 MySQL不爲此使用'#'。 – Barmar