我有两个表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表为空时,此查询无法恢复记录!
发布于 2013-02-19 16:33:34
使用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发布于 2013-02-19 16:36:44
下面是它使用子查询,但没有连接的情况:
SELECT id, title
FROM data
WHERE id NOT IN (SELECT data_id FROM page)
ORDER BY title ASC发布于 2013-02-19 17:22:12
NOT IN将为您提供所需的内容,但取决于您的数据库系统(和索引的类型),这不是最好(最快)的解决方案。更常见的情况是,不存在会更快。但您的里程可能会有所不同。
试一试:
SELECT id, title FROM data
WHERE NOT EXISTS (SELECT * FROM page WHERE page.data_id = data.id)
ORDER BY title ASChttps://stackoverflow.com/questions/14953010
复制相似问题