SQL - 带有IN的where子句中的Concat

时间:2017-03-18 02:50:21

标签: sql

我正在尝试使用IN来查询多个列。如果我使用“=”,我会返回行(参见示例),但我想查询多个。

需要查询表返回行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)

我已尝试过括号,逗号等的几种变体,但却无法使其发挥作用。是否可以执行此操作,如果可以,则可以提供语法。

感谢

3 个答案:

答案 0 :(得分:0)

根据您的数据,这可能是可行的:

scan.nextLine()

答案 1 :(得分:0)

事实证明这很简单,应该知道这一点。

SELECT * FROM TABLE 在哪里CONCAT(column1,column2)IN('A12345','B98765')

答案 2 :(得分:-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)