1

我有 2 个表datapagedata表中我有一些记录,一些data记录 id 将存储在page表中。

现在我想要选择idtitle形成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表为空时,此查询无法恢复记录!

4

4 回答 4

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
于 2013-02-19T08:33:34.023 回答
2

这是带有子查询的,但没有连接:

SELECT id, title
FROM data
WHERE id NOT IN (SELECT data_id FROM page)
ORDER BY title ASC
于 2013-02-19T08:36:43.840 回答
1

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
于 2013-02-19T09:22:12.197 回答
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;
于 2013-02-19T08:36:50.667 回答