Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL左连接。。在…上条款_Mysql_Sql_Db2 - Fatal编程技术网

MySQL左连接。。在…上条款

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子句。不幸的是,在移动它之后,查

我目前正在将一个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子句。不幸的是,在移动它之后,查询似乎没有从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)

听起来更像是代码中的错误。也许真正的查询会有所帮助?听起来更像是代码中的错误。也许真正的问题会有所帮助?