2017-05-31 49 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