2017-11-11 99 views
-3

非常簡單的問題。但是從最近幾個小時仍然停滯不前。SQL運算符「IN」不起作用

我喜歡在MySQL(phpMyAdmin的)執行SQL查詢:

SELECT * FROM `orderbook` WHERE (`order_to` IN ('49,6')) AND (`rate_change` = 'YES') ORDER BY `createdon` DESC LIMIT 10 

這裏我只得到結果與49相匹配, 我更改訂單像(6,49),然後我得到的結果與6匹配只有..

請幫我在哪裏丟失..

謝謝。 PRASHANT

+0

未來請閱讀並採取行動[問]和其他[幫助]鏈接,但尤其是[mcve]。 – philipxy

回答

4

應該是:

IN (6, 49) assuming this is a numeric column. 
+0

是它的int列。 –

+0

那應該解決它。 – gview

+1

@gview試圖告訴您刪除'6,49'或'49,6'附近的引號。它應該是'IN(6,49)',而不是'IN('6,49')'。 – Wodin

1

你應該使用IN就象這樣:

... WHERE (`order_to` IN (49, 6)) ... 

或者,如果他們是字符串:

... WHERE (`order_to` IN ('49', '6')) ... 

當你傳遞給IN的值'49,6'它試圖匹配那個確切的str字段值。

0

也許你在錯誤的練習中使用'46,6'我希望你想在46和6中搜索,如果這是真的,那麼使用下面的查詢。

SELECT * FROM `orderbook` WHERE (`order_to` IN ('49','6')) AND (`rate_change` = 'YES') ORDER BY `createdon` DESC LIMIT 10 
1

由於@gview和@JorgeCampos說,你不應該在你的IN語句中引用的號碼列表。

它部分工作的原因是因爲MySQL試圖變得聰明。由於order_to是一個整數,因此MySQL正試圖將字符串'49,6'轉換爲數字並獲得49

mysql> SELECT * FROM `orderbook` WHERE (`order_to` IN ('49,6')); 
+----+----------+ 
| id | order_to | 
+----+----------+ 
| 3 |  49 | 
+----+----------+ 
1 row in set, 1 warning (0,00 sec) 

mysql> show warnings; 
+---------+------+------------------------------------------+ 
| Level | Code | Message         | 
+---------+------+------------------------------------------+ 
| Warning | 1292 | Truncated incorrect DOUBLE value: '49,6' | 
+---------+------+------------------------------------------+ 
1 row in set (0,00 sec) 

mysql> select cast('49,6' as unsigned); 
+--------------------------+ 
| cast('49,6' as unsigned) | 
+--------------------------+ 
|      49 | 
+--------------------------+ 
1 row in set, 1 warning (0,01 sec) 

mysql> show warnings; 
+---------+------+-------------------------------------------+ 
| Level | Code | Message         | 
+---------+------+-------------------------------------------+ 
| Warning | 1292 | Truncated incorrect INTEGER value: '49,6' | 
+---------+------+-------------------------------------------+ 
1 row in set (0,00 sec) 
+1

好的解釋! +1 –