我有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
表为空时,此查询无法恢复记录!
答案 0 :(得分:2)
使用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
答案 1 :(得分:2)
这是子查询,但没有连接:
SELECT id, title
FROM data
WHERE id NOT IN (SELECT data_id FROM page)
ORDER BY title ASC
答案 2 :(得分:1)
NOT IN将为您提供您想要的内容,但根据您的数据库系统(以及索引类型),这将不是最佳(最快)的解决方案。更常见的是,EXISTS不会更快。但你的里程可能会有所不同。
试一试:
SELECT id, title FROM data
WHERE NOT EXISTS (SELECT * FROM page WHERE page.data_id = data.id)
ORDER BY title ASC
答案 3 :(得分:0)
我认为您正在尝试确定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;