【问题标题】:Opposite of join in SQL with selecting 2 columns?与选择 2 列的 SQL 连接相反?
【发布时间】:2018-07-02 05:44:54
【问题描述】:

我有两个表 A 和 B,我想选择两个表在同一列 (user_id) 中相同且在另一列 (A.columnX != B.columnY) 中不相似的数据。

实际上,我想要 SQL 连接的反面。 有人可以帮帮我吗?

【问题讨论】:

标签: php sql join


【解决方案1】:

如果您想根据进一步的逻辑过滤连接,只需使用WHERE 子句:

SELECT
    table_a.something,
    table_a.something_else,
    table_b.another_thing
FROM table_a
INNER JOIN table_b
    ON table_b.user_id = table_a.user_id
WHERE
    table_a.column_x != table_b.column_y;

【讨论】:

  • 您也可以将WHERE 条件移动到ON 子句中(使用AND),如果这样更容易表达的话。这两种形式在语法上是相同的,并且查询优化器的处理方式相同 - 您使用哪种形式并不重要。
【解决方案2】:

您可以将连接查询提供为:

select <<Column list>> from table1 a, table2 b where a.userid=b.userid and a.columnX!=b.columnY;

【讨论】:

  • 感谢您的回答。我在两个表中都有不同的用户 ID,我应该说 a.userid 或 b.userid = M 的位置,我可以在 SQL 末尾添加这个吗?
  • 你到底想要什么?
  • 今日提示:切换到现代、明确的JOIN 语法!更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。
【解决方案3】:

当你描述这个问题时,你似乎想要NOT EXISTS

SELECT a.something, a.something_else,
       b.another_thing
FROM table_a a INNER JOIN
     table_b b
     ON b.user_id = a.user_id
WHERE NOT EXISTS (SELECT 1
                  FROM table_b b2
                  WHERE b2.user_id = b.user_id and
                        b2.column_y = a.column_x
                 );

不清楚是否要在相关子句中进行user_id 比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2012-01-31
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多