2016-03-02 23 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搜索到一个逗号分隔值的列表。