比较select子句中的字段在sqlite中有效,但在DB2中无效
我正在使用如下形式的查询检查两个表之间的地址差异:比较select子句中的字段在sqlite中有效,但在DB2中无效,sql,sqlite,db2,odbc,Sql,Sqlite,Db2,Odbc,我正在使用如下形式的查询检查两个表之间的地址差异: SELECT a.*, (a.address <> b.address) AS discrepancy FROM table1 AS a LEFT JOIN table2 AS b ON a.uniqueIdentifier = b.uniqueIdentifier 选择一个*(a.地址b.地址)作为差异 从表1中作为 左键将表2连接为b 在a.uniqueIdentifier=b.uniqueIdentifier上 我期
SELECT a.*, (a.address <> b.address) AS discrepancy
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.uniqueIdentifier = b.uniqueIdentifier
选择一个*(a.地址b.地址)作为差异
从表1中作为
左键将表2连接为b
在a.uniqueIdentifier=b.uniqueIdentifier上
我期望的是,如果a.address与b.address不完全匹配,那么它的计算结果将为true;因此,“差异”字段将返回true或“1”
(注意,之所以使用左联接,是因为表2中可能没有匹配的行,但不管怎样,我都需要从表1中捕获数据,因为我正在遍历列表并显示地址是否有问题)
该查询在我使用SQLite进行单元测试时有效,但在使用ODBC开发DB2数据库时失败
返回的错误代码是[code:-104,SQL状态:42601][SQL0104]令牌A无效。有效令牌:(.
如果DB2根本不支持这一点,我愿意接受其他方法来设计查询
注:进一步测试表明
从表1中选择一个id(1+1)作为两个
工作,而
从表1中选择a.id,(1=1)作为两个
=>令牌1无效
选择一个*,如果a.address b.address,则以1结束,否则以不符结束
SELECT a.*, case when a.address <> b.address then 1 else 0 end AS discrepancy
FROM table1 AS a
LEFT JOIN table2 AS b
ON a.uniqueIdentifier = b.uniqueIdentifier
从表1中作为
左键将表2连接为b
在a.uniqueIdentifier=b.uniqueIdentifier上
选择一个*,当a.address b.address然后1,否则0以不符结束
从表1中作为
左键将表2连接为b
在a.uniqueIdentifier=b.uniqueIdentifier上
DB2 SQL没有布尔数据类型,因此不能通过SQL语句生成布尔值。类似的操作应该可以:
SELECT a.*,
CASE WHEN a.address <> b.address THEN 1 ELSE 0 END AS discrepancy
FROM ...
选择一个*,
当a.address b.address然后1 ELSE 0作为差异结束时的情况
从…起
DB2 SQL没有布尔数据类型,因此不能通过SQL语句生成布尔值。类似的操作应该可以:
SELECT a.*,
CASE WHEN a.address <> b.address THEN 1 ELSE 0 END AS discrepancy
FROM ...
选择一个*,
当a.address b.address然后1 ELSE 0作为差异结束时的情况
从…起
您实际上不需要括号。没有括号它可以工作吗?您实际上不需要括号。没有括号它可以工作吗?感谢您解释原因。我在谷歌上搜索了db2 boolean,9.7Boolean中引入了boolean数据类型,只能在SQL PL程序中使用,不能在SQL中使用——请参阅感谢您解释原因。我在谷歌上搜索了b2 boolean和显然是boolean在9.7Boolean中被引入,数据类型只能在SQL PL程序中使用,不能在SQL中使用——请参阅