【发布时间】:2015-02-08 12:59:46
【问题描述】:
在 mysql 中,如果我有一条记录引用了另一条记录的 id。例如
Table 1
id bigint
tabe2ref bigint
Table 2
id bigint
table2ref 仅引用 Table2.id。
有没有办法列出表 1 中引用表 2 中不存在该记录的记录的所有记录?
【问题讨论】:
标签: mysql
在 mysql 中,如果我有一条记录引用了另一条记录的 id。例如
Table 1
id bigint
tabe2ref bigint
Table 2
id bigint
table2ref 仅引用 Table2.id。
有没有办法列出表 1 中引用表 2 中不存在该记录的记录的所有记录?
【问题讨论】:
标签: mysql
如果您还想要 table2 中的数据,请使用 LEFT JOIN,如 dognose 的回答。如果您只想要 table1 中的数据,请使用子查询,如下所示:
SELECT * FROM table1 WHERE table2ref NOT IN (
SELECT id FROM table2
)
基本上,这读作“从表 1 中获取所有内容并减去所有具有 table2ref 的行,但该行不在 table2 的所有行中。”
【讨论】:
您正在寻找 LEFT JOIN - 表 2 中的条目不存在的所有内容在加入后将具有 table2.id 的 null:
SELECT
table1.id, table1.table2ref, table2.id
FROM
table1
LEFT JOIN
table2
ON
table1.table2ref = table2.id
WHERE
ISNULL(table2.id) -- only those records with missing reference.
另见:http://giannopoulos.net/wp-content/uploads/2013/05/BHVicYICMAAdHGv.jpg (第一列,第二行)
【讨论】: