2015-02-08 58 views
1

在mysql中,如果我有一个引用另一个记录的id的记录。例如mysql在引用不存在的记录的表中查找记录

Table 1 
id   bigint 
tabe2ref bigint 

Table 2 
id   bigint 

其中table2ref只是引用Table2.id。
有没有办法列出表1中引用表2中记录不存在的记录的所有记录?

回答

0

你正在寻找一个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 (第一列,第二行)

2

如果你想要table2中的数据,那么在dognose的答案中使用LEFT JOIN。如果只想从表1中的数据,使用子查询,像这样:

SELECT * FROM table1 WHERE table2ref NOT IN (
    SELECT id FROM table2 
) 

从本质上讲,这显示“得到一切从表1和减去其中有一个table2ref,是不是在表2中的所有行的所有行“。