2017-05-31 57 views
0

我检查两个表之间的处理差异,使用形成这样的查询:比较领域的文章SQLite中而不是在DB2

SELECT a.*, (a.address <> b.address) AS discrepancy 
FROM table1 AS a 
LEFT JOIN table2 AS b 
ON a.uniqueIdentifier = b.uniqueIdentifier 

什么我期待的是,如果一个。地址不完全匹配b.address,它会评估为true;因此该字段“差异”将返回true或“1”。

(注意,在LEFT JOIN被使用,因为可能没有表2中有匹配的行,但我需要捕获从表1的数据,无论是因为我遍历列表并显示,如果地址有问题)

该查询在我的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 =>Token 1 was not valid

+0

你实际上不需要括号。没有它们,它会起作用吗? –

回答

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

DB2 SQL不具有布尔数据类型,所以你不能产生一个布尔值由一个SQL语句来完成。像这样的东西应该工作:

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

感谢您解释原因。我使用了db2布尔值,显然布尔型已经在9.7中引入了 –

+0

布尔数据类型只能在SQL PL程序中使用,而不能在SQL中使用 - 请参见[手册](https://www.ibm.com/support/knowledgecenter/SSEPGG_10 .5.0/com.ibm.db2.luw.apdv.sqlpl.doc/DOC/c0053651.html) – mustaccio