考虑到我有两张桌子。
一个是“Table1”,如下所示。
另一个表是“Table2”,如下所示。
现在我需要的是,我需要 Table1 中的所有记录,那些 ID 不在 Table2 的参考列中。
请指导我如何做到这一点。
提前致谢。
考虑到我有两张桌子。
一个是“Table1”,如下所示。
另一个表是“Table2”,如下所示。
现在我需要的是,我需要 Table1 中的所有记录,那些 ID 不在 Table2 的参考列中。
请指导我如何做到这一点。
提前致谢。
如何使用您当前的模式来做到这一点(不可能使用索引):
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)