【问题标题】:MySQL - subtracting one query set from anotherMySQL - 从另一个中减去一个查询集
【发布时间】:2016-05-15 20:16:51
【问题描述】:

我不知道该怎么做,因为我的讲义告诉我在 SQL 中使用“EXCEPT”,但 MYSQL 似乎不支持这一点。我一直在想我应该使用“WHERE NOT IN”作为替代,但我的问题是我需要比较的这两个列都有不同的名称。

这是我的错误查询:

(SELECT id FROM projects) WHERE id NOT IN  (SELECT project_id FROM projects_viewed);

我想从“projects”表中选择 id 列未出现在“projects_viewed”表中的所有行。但是该列被称为“project_id”而不是“id”,因为它是一个外键。

基本上这背后的逻辑是,从这个查询返回的结果集应该是所有没有被查看的项目id(第二个表中的那些)。

【问题讨论】:

    标签: mysql subtraction except


    【解决方案1】:

    有几种方法可以做到这一点。这是一个使用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 中更有效。

    【讨论】:

    • 非常感谢。我将尝试测试第一个示例,因为这看起来很有希望:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多