比较select子句中的字段适用于sqlite但不适用于DB2

时间:2017-05-31 15:33:42

标签: 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.address与b.address不完全匹配,它将评估为true;因此,领域,“差异”#39;将返回true或&#39; 1&#39;。

(注意,使用左连接是因为table2中可能没有匹配的行,但我需要从table1捕获数据,因为我正在迭代列表并显示地址是否有问题)

该查询在我的单元测试中使用SQLite,但随后在使用ODBC的DB2数据库的开发中失败。

返回的错误代码为[Code: -104, SQL State: 42601] [SQL0104] Token A was not valid. Valid tokens: (.

如果DB2中根本不支持这一点,我可以使用其他想法来制作查询。

注意:进一步测试表明

select a.id, (1+1) as two from table1 as a

有效,而

select a.id, (1=1) as two from table1 as a =&gt; Token 1 was not valid

2 个答案:

答案 0 :(得分:1)

v: SomeTrait

答案 1 :(得分:1)

DB2 SQL没有布尔数据类型,因此您无法通过SQL语句生成布尔值。这样的事情应该有效:

SELECT a.*,  
       CASE WHEN a.address <> b.address THEN 1 ELSE 0 END AS discrepancy 
FROM ...