MySQL命令NOT IN的奇怪行为GROUP_CONCAT?

时间:2018-10-21 04:53:15

标签: mysql sql

我真的对MySQL命令的下一个行为感到困惑。如您所见,我的SQL语句非常简单。

SQL语句:

SELECT *
FROM TABLE_1
WHERE POSITION_ID NOT IN (
    SELECT GROUP_CONCAT(ID_OBJECT)
    FROM TABLE_2
)

此部分:

SELECT GROUP_CONCAT(ID_OBJECT)
FROM TABLE_2

还给我:5636,4697,2174,5559,3180,4102,4192,7598,5922,7432

但是当我检查SQL语句时,我看到具有POSITION_ID = 3180的记录。怎么发生的?不应有这样的记录,因为我们排除了它。我做错了什么?也许我错过了一些符号?

编辑

我认为问题可能出在GROUP_CONCAT命令中。可能会将结果放在这样的撇号中,这不是我想要的:

SELECT *
FROM TABLE_1
WHERE POSITION_ID NOT IN ("5636,4697,2174,5559,3180,4102,4192,7598,5922,7432")

我需要这样的代码:

SELECT *
FROM TABLE_1
WHERE POSITION_ID NOT IN (5636,4697,2174,5559,3180,4102,4192,7598,5922,7432)

1 个答案:

答案 0 :(得分:2)

GROUP_CONCAT函数将返回一个字符串值,如果NOT INGROUP_CONCAT(ID_OBJECT)的使用将与字符串结果进行比较。

您可以尝试将NOT IN与子查询一起使用。

SELECT *
FROM TABLE_1
WHERE POSITION_ID NOT IN (
    SELECT ID_OBJECT
    FROM TABLE_2
)