MySQL左连接。。在…上条款
我目前正在将一个MySQL数据库移植到另一个DBMS。我遇到了具有以下结构的以下查询MySQL左连接。。在…上条款,mysql,sql,db2,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)“和tb2.y=2和tb2.z=3”不允许以下结构,因此我将其移动到WHERE子句。不幸的是,在移动它之后,查
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)“和tb2.y=2和tb2.z=3”不允许以下结构,因此我将其移动到WHERE子句。不幸的是,在移动它之后,查询似乎没有从MySQL返回相同的行。尝试以下操作:
SELECT ...
FROM table1 AS tb1 LEFT JOIN Table2 AS tb2
ON tb1.x = tb2.x ,
tb2.y = 2 ,
tb2.z = 3 ...
试试这个:
SELECT ...
FROM table1 AS tb1 LEFT JOIN Table2 AS tb2
ON tb1.x = tb2.x ,
tb2.y = 2 ,
tb2.z = 3 ...
您是否尝试将其转换为
右连接
SELECT ...
FROM Table2 AS tb2
RIGHT JOIN ON table1 AS tb1 tb1.x = tb2.x
WHERE tb2.y = 2 AND tb2.z = 3 ...
您是否尝试将其转换为
右连接
SELECT ...
FROM Table2 AS tb2
RIGHT JOIN ON table1 AS tb1 tb1.x = tb2.x
WHERE tb2.y = 2 AND tb2.z = 3 ...
我认为DB2不允许使用
as
的表别名(但我现在手头没有DB2)
试一试
(注意表名后缺少的为)
编辑:我刚刚查看了DB2手册,AS似乎是有效的……
(但我现在就不发帖子了)我认为DB2不允许使用作为
的表别名(但我现在手头没有DB2)
试一试
(注意表名后缺少的为)
编辑:我刚刚查看了DB2手册,AS似乎是有效的……
(但我现在就不发帖子了)显然,DB2只会在比较中使用列名。也许您可以以某种方式人工创建在联接表中具有这些值的列?您是否收到错误-338?显然,DB2在比较中只使用列名。也许您可以以某种方式人工创建在联接表中具有这些值的列?是否出现错误-338?在外部联接中,当将谓词从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)
在外部联接中,当将谓词从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)
听起来更像是代码中的错误。也许真正的查询会有所帮助?听起来更像是代码中的错误。也许真正的问题会有所帮助?