2017-03-18 232 views
-1

我在嘗試使用IN來查詢多個列。如果我使用「=」,我返回行(請參閱示例),但我想查詢多個。SQL - Concat與IN中的where子句

需要查詢表返回行A12345和B98765但不C00000

column1 | column2 
A   12345 
B   98765 
C   00000 

這工作

SELECT * 
FROM TABLE 
WHERE (column1,column2) = ('A',12345) 

這是行不通的。

SELECT * 
FROM TABLE 
WHERE (column1,column2) IN (('A',12345),('B',98765)) 

這裏是錯誤:

Error: SQL0104N An unexpected token "," was found following ",". Expected tokens may include: "AT MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MINUTE HOURS". SQLSTATE=42601 
(State:42601, Native Code: FFFFFF98) 

我試過括號,逗號的等幾種變化並不能得到它的工作。有沒有可能做到這一點,如果可以的話,你可以提供語法。

感謝

+1

什麼數據庫服務器是什麼呢? MSSQL或DB2?聽起來像DB2。 – HappyTown

回答

-1

DB2 9.7開始:

SELECT * 
FROM TABLE 
WHERE (column1, column2) IN (VALUES ('A', 12345), ('B', 98765)) 

一種解決方案是使用臨時表:

create table #tmp 
(
    col1 varchar(2), 
    col2 int 
); 

insert into #tmp (col1, col2) 
values ('A', 12345), ('B', 98765) 

SELECT t.* FROM TABLE t 
JOIN #tmp ON #tmp.col1 = t.column1 and #tmp.col2 = t.column2 

你還沒有說你的RDBMS,但你嘗試過:

SELECT * FROM TABLE 
WHERE (column1, column2) IN ('A', 12345) 
OR (column1, column2) IN ('B', 98765) 
+0

和downvote是因爲? –

0

取決於o ñ您的數據,這可能是可行的:

SELECT * 
FROM TABLE T 
JOIN (
    SELECT 'A' COL1, 12345 COL2 
    UNION ALL 
    SELECT 'B', 98765 
    UNION ALL 
    SELECT 'C', 44365) AS Matches 
ON T.column1 = Matches.COL1 
AND T.column2 = Matches.COL2 
0

這原來很容易,應該知道這一點。

SELECT * FROM 表 WHERE CONCAT(列1,列2)IN( 'A12345', 'B98765')