【问题标题】:SQL: Compare if column values in two tables are equalSQL:比较两个表中的列值是否相等
【发布时间】:2012-05-18 10:10:33
【问题描述】:

我正在使用 mysql 并且有两个具有相同架构的表:

预审

|id|accusedId|articleid|
------------------------
|1 |     1   |     1   |
|2 |     1   |     2   |
|3 |     1   |     3   |
|4 |     2   |     1   |
|5 |     2   |     2   |

试用

|id|accusedId|articleid|
------------------------
|1 |     1   |     1   |
|2 |     1   |     2   |
|3 |     2   |     1   |
|4 |     2   |     2   |

我想得到那些accusedIds,其中第一个和第二个表的所有articleIds 都相等。

上面的例子应该只返回被指控的Id 2,因为被指控的Id 1 在第二个表中没有articleId 3。

我希望你明白我的意思。我目前正在写我的法律论文,而我进入 sql 的时间已经一去不复返了。当然我已经做了一些研究,并尝试了几次加入,但我无法找到解决方案。希望你能帮助我。

【问题讨论】:

    标签: mysql join compare equals


    【解决方案1】:

    试试这样的:

    select a.accusedId , sum(a.accusedid) as cnt_a, sum(coalesce(b.accusedId, 0)) as cnt_b
    from a left join b on a.accusedId =  b.accusedId and a.articleId = b.articleId
    group by accusedId
    having cnt_a = cnt_b
    

    我什至还没有运行它,所以它可能有点不对劲,但是给它一个鞭子。它所做的是为 a 中与 b 不匹配的行返回零,因此 HAVING 子句会将您的分组结果过滤到文章数量相等的那些。

    【讨论】:

    • 感谢您的解决方案和解释。只有两个注意事项:而不是select accusedId,它应该是select a.accusedId并且在sum之后没有空格,否则mysql会抛出错误。否则它工作正常。你让我开心
    • 已编辑答案以包含建议。我想赞同戈登的观点;如果它有效,接受答案不会超过几秒钟。干杯。
    • 对不起,我是 stackoverflow 的新手,我想投票赞成并接受它,是一样的,由于声誉低,我无法投票。现在,我接受了答案。
    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2015-10-26
    • 1970-01-01
    • 2010-12-10
    • 2013-08-18
    • 1970-01-01
    • 2021-09-14
    • 2023-03-11
    相关资源
    最近更新 更多