我有 2 个表data
,page
在data
表中我有一些记录,一些data
记录 id 将存储在page
表中。
现在我想要选择id
并title
形成data
不在桌子上的page
表格。所以我写了这个查询:
SELECT d.id,d.title
FROM data AS d, page AS p
WHERE d.id NOT IN (p.data_id)
ORDER BY d.title ASC
此查询将起作用,但当page
表为空时,此查询无法恢复记录!
采用LEFT JOIN
SELECT a.*
FROM data a
LEFT JOIN page b
ON a.ID = b.data_id
WHERE b.data_id IS NULL
ORDER BY a.title ASC
这是带有子查询的,但没有连接:
SELECT id, title
FROM data
WHERE id NOT IN (SELECT data_id FROM page)
ORDER BY title ASC
NOT IN 会给你你想要的,但取决于你的数据库系统(和索引的类型),这不是最好的(最快的)解决方案。更多的时候 not EXISTS 会更快。但是您的里程可能会有所不同。
试试看:
SELECT id, title FROM data
WHERE NOT EXISTS (SELECT * FROM page WHERE page.data_id = data.id)
ORDER BY title ASC
我认为您正在尝试确定什么data
没有page
:
SELECT d.id, d.title
FROM data d
WHERE d.id NOT IN (
SELECT data_id FROM page
)
ORDER BY d.title ASC;