MySQL LEFT JOIN .. ON .. 子句

标签 mysql sql db2

我目前正在将 MySQL 数据库移植到另一个 DBMS。我遇到了以下具有以下结构的查询。

SELECT ... FROM table1 AS tb1 
      LEFT JOIN Table2 AS tb2 
             ON tb1.x = tb2.x 
             AND tb2.y = 2 AND tb2.z = 3 ...

我的目标 DBMS (DB2)“AND tb2.y = 2 AND tb2.z = 3”不允许使用以下结构,因此我将其移至 WHERE 子句。不幸的是,在移动它之后,查询似乎没有从 MySQL 返回相同的行。

最佳答案

在外连接中,当将谓词从 ON 子句移动到 WHERE 子句时,您必须考虑到连接产生不匹配的记录,因此列外部表中的数据将全部为 NULL

我没有 DB2 经验,因此可能还有其他我不知道的微妙之处,但这就是我重写查询的方式。检查连接列中的 NULL 可以直接指示连接是否找到匹配项。

SELECT ... FROM table1 AS tb1 
      LEFT JOIN Table2 AS tb2 
             ON tb1.x = tb2.x 
      WHERE tb2.x IS NULL
         OR (tb2.y = 2 AND tb2.z = 3)

关于MySQL LEFT JOIN .. ON .. 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869233/

相关文章:

php - 从多行增加相同列的值

MYSQL获取特定月份和年份之前的记录

sql - mysql:哪些查询可以使用哪些索引?

c# - C#调用AS400程序,从QTEMP中选择文件

sql - 选择正确的数据库 : MySQL vs. 其他一切

sql - SQL 中的酒店房间状态生成

php - SQL SUM 通过 SUM 进行分组

python - SQL ORDER BY 时间戳,相同的值

mysql - SQL Count() child Rows 基于来自 Parent 的值

sql - 在一个语句中选择两个表的联接中的第一行