SQL - Concat与IN中的where子句
问题描述:
我在尝试使用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)
我试过括号,逗号的等几种变化并不能得到它的工作。有没有可能做到这一点,如果可以的话,你可以提供语法。
感谢
答
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是因为? –
答
取决于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
答
这原来很容易,应该知道这一点。
SELECT * FROM 表 WHERE CONCAT(列1,列2)IN( 'A12345', 'B98765')
什么数据库服务器是什么呢? MSSQL或DB2?听起来像DB2。 – HappyTown