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 joinnull 检查的一个:

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 更有效。