MySQL - 从一个查询集减去另一个查询集
MySQL - subtracting one query set from another
我不知道该怎么做,因为我的讲义告诉我在 SQL 中使用 "EXCEPT",但 MYSQL 似乎不支持这个。我一直在想我应该使用 "WHERE NOT IN" 作为替代,但我的问题是我需要比较的这两列都有不同的名称。
这是我的错误查询:
(SELECT id FROM projects) WHERE id NOT IN (SELECT project_id FROM projects_viewed);
我想select table "projects" 中id 列未出现在"projects_viewed" table 中的所有行。但是该列被称为 "project_id" 而不是 "id" 因为它是一个外键。
基本上这背后的逻辑是这个查询返回的结果集应该是所有没有被查看的项目id(第2个table)。
有几种方法可以做到这一点。这是使用 outer join
和 null
检查的一个:
select p.id
from projects p
left join projects_viewed pv on p.id = pv.project_id
where pv.project_id is null
另一个 not in
:
select id
from projects
where id not in (select project_id from projects_viewed)
我认为这些方法在 mysql
中比 not exists
更有效。
我不知道该怎么做,因为我的讲义告诉我在 SQL 中使用 "EXCEPT",但 MYSQL 似乎不支持这个。我一直在想我应该使用 "WHERE NOT IN" 作为替代,但我的问题是我需要比较的这两列都有不同的名称。
这是我的错误查询:
(SELECT id FROM projects) WHERE id NOT IN (SELECT project_id FROM projects_viewed);
我想select table "projects" 中id 列未出现在"projects_viewed" table 中的所有行。但是该列被称为 "project_id" 而不是 "id" 因为它是一个外键。
基本上这背后的逻辑是这个查询返回的结果集应该是所有没有被查看的项目id(第2个table)。
有几种方法可以做到这一点。这是使用 outer join
和 null
检查的一个:
select p.id
from projects p
left join projects_viewed pv on p.id = pv.project_id
where pv.project_id is null
另一个 not in
:
select id
from projects
where id not in (select project_id from projects_viewed)
我认为这些方法在 mysql
中比 not exists
更有效。