在mysql中,如果我有一个引用另一个记录的id的记录。例如mysql在引用不存在的记录的表中查找记录
Table 1
id bigint
tabe2ref bigint
Table 2
id bigint
其中table2ref只是引用Table2.id。
有没有办法列出表1中引用表2中记录不存在的记录的所有记录?
在mysql中,如果我有一个引用另一个记录的id的记录。例如mysql在引用不存在的记录的表中查找记录
Table 1
id bigint
tabe2ref bigint
Table 2
id bigint
其中table2ref只是引用Table2.id。
有没有办法列出表1中引用表2中记录不存在的记录的所有记录?
你正在寻找一个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 (第一列,第二行)
如果你想要table2中的数据,那么在dognose的答案中使用LEFT JOIN。如果只想从表1中的数据,使用子查询,像这样:
SELECT * FROM table1 WHERE table2ref NOT IN (
SELECT id FROM table2
)
从本质上讲,这显示“得到一切从表1和减去其中有一个table2ref,是不是在表2中的所有行的所有行“。