2017-03-18 233 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')