NOT IN运算符不适用于mysql中的非主键值

Sul*_*man 7 php mysql

我已经阅读了很多关于NOT IN运算符的Q&A,即 如果我使用IN运算符来过滤NULL值和空格它是不行的为什么? 还有很多其他问题,但问题是当我们在运算符中不使用非主键时,它不会返回响应.

SELECT * FROM temp_customers WHERE temp_customers.fk_my_id NOT IN (SELECT fk_my_id FROM customers)
Run Code Online (Sandbox Code Playgroud)

其中fk_my_id是非主键,可能是一个字符串.

有什么想法吗?

Yog*_*har 11

group_concat这里fk_my_id用逗号分隔

SELECT * FROM temp_customers WHERE temp_customers.fk_my_id NOT IN 
(SELECT GROUP_CONCAT(fk_my_id) FROM customers)   
# when fk_my_id is INTEGER output (1,2)

SELECT * FROM temp_customers WHERE temp_customers.fk_my_id NOT IN 
(SELECT GROUP_CONCAT("'",fk_my_id,"'") FROM customers)   
# when fk_my_id is VARCHAR output ('1','2')
Run Code Online (Sandbox Code Playgroud)

  • @john问题是`fk_my_id`没有用逗号分隔并且只产生一个字符串,但在`GROUP_CONCAT`的帮助下,你的所有id都用逗号分隔. (2认同)