0

考虑到我有两张桌子。

一个是“Table1”,如下所示。

在此处输入图像描述

另一个表是“Table2”,如下所示。

在此处输入图像描述

现在我需要的是,我需要 Table1 中的所有记录,那些 ID 不在 Table2 的参考列中。

请指导我如何做到这一点。

提前致谢。

4

1 回答 1

1

如何使用您当前的模式来做到这一点(不可能使用索引):

SELECT Table1.*
FROM Table1
WHERE NOT EXISTS
(
    SELECT 1
    FROM Table2
    WHERE CONCAT(',', Table2.Reference, ',') LIKE CONCAT('%,', Table1.ID, ',%')
)

它的工作原理是Reference用逗号将列中的每个值完全包裹起来。你最终会,2,3,得到,7,8,9,你的样本数据。然后您可以安全地,<Table1.ID>,在该字符串中搜索。


如何真正做到:

规范化您的数据库,并摆脱那些丑陋、无用的逗号分隔列表。

将您的 table2 修复为:

编号 | 参考
------+------------
    1 | 2
    1 | 3
    2 | 7
    2 | 8
    2 | 9

并添加一个 table2Names 为:

编号 | 姓名
------+---------
    1 | 测试
    2 | 测试 2

然后你可以简单地做:

SELECT Table1.*
FROM Table1
WHERE NOT EXISTS(SELECT 1 FROM Table2 WHERE Table2.Reference = Table1.ID)
于 2013-02-01T04:34:55.503 回答