7

我已经阅读了很多关于 NOT IN 运算符的问答,即 如果我使用 IN 运算符过滤 NULL 值和空格它不起作用为什么? 还有很多其他的,但问题是当我们对非主键使用 not in 运算符时,它不会返回响应。

SELECT * FROM temp_customers WHERE temp_customers.fk_my_id NOT IN (SELECT fk_my_id FROM customers)

其中 fk_my_id 是非主键并且可能是一个字符串。

请问有什么想法吗?

4

2 回答 2

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')
于 2013-03-22T07:47:41.450 回答
0

我猜你在查询中使用了错误的列:(SELECT fk_my_id FROM customers)。它应该是您的客户表的 pkId

SELECT * FROM temp_customers 
WHERE temp_customers.fk_my_id 
NOT IN (SELECT pk_my_id FROM customers)
于 2013-03-22T07:50:41.970 回答