2016-03-02 20 views
0

我有一個這樣的代碼:MySQL的選擇外殼

SELECT * 
FROM table1 
WHERE integer NOT IN (
SELECT varchars FROM table2 WHERE id = 1) 

varchars包括由逗號(1,2,3,4等)分隔的數字此代碼不正確地工作,因爲之間的SELECT部括號中包含引號' ',MySQL只讀取第一個逗號前的第一個整數。我如何閱讀這些引用或使代碼工作?

SELECT * 
FROM table1 
WHERE integer NOT IN (
SELECT varchars FROM table2 WHERE id = 1 FIELDS ENCLOSED BY 'NULL') 

沒有幫助我,因爲它會導致錯誤#1064。

+0

咦?請擴展:*,因爲括號內的SELECT部分​​被引號括起來,MySQL只讀取第一個逗號*之前的第一個整數。 – BenM

+0

'SELECT * FROM table1 LEFT JOIN表2 ON FIND_IN_SET(integer,varchars)AND id = 1 WHERE varchars IS NULL' – Mihai

+0

感謝Mihai,它工作完美! – Himmel

回答

0
SELECT * FROM table1 LEFT JOIN table 2 ON FIND_IN_SET(integer,varchars) AND id =1 WHERE varchars IS NULL 

這一個是由米哈伊在上面的註釋部分提到一個正確的答案。 Sebas的版本也可以,但是當table2中id = 1的varchars不存在時,它會返回NULL,而它應該返回table1中的所有整數。

0
SELECT * 
FROM table1 CROSS JOIN (SELECT varchars FROM table2 WHERE id = 1) AS t 
WHERE NOT FIND_IN_SET(integer, t.varchars) 
; 
  • CROSS JOIN所以查詢自身的只是執行(只要它返回一個記錄)
  • FIND_IN_SET搜索到一個逗號分隔值的列表。