我必须检查大约20列中的一组值,
SELECT * FROM MY_TABLE WHERE
COL1 IN ('01','02'..'10')
OR COL2 IN ('01','02'..'10')
OR COL3 IN ('01','02'..'10')
OR COL4 IN ('01','02'..'10')
.
.
.
.
OR COL20 IN ('01','02'..'10')
有没有更有效的替代方式?
答案 0 :(得分:0)
这可能对您有用:
编辑:哦我没有看到db2标签......这可以在T-SQL中使用。我不确定DB2。
CREATE TABLE #values ([myVal] VARCHAR(2));
INSERT INTO #values([myVal])
VALUES ('01'),('02'),...,('10');
SELECT
*
FROM MY_TABLE A
WHERE EXISTS (
SELECT *
FROM #values
WHERE [myVal] IN (A.[Col1],A.[Col2],...)
)
答案 1 :(得分:0)
select * from MYTABLE where ( select name from sysibm.syscolumns where tbname = 'MYTABLE' and tbcreator='MYID' and name like ('COL_')) IN ('01',..,'10');
即使从 sysibm.syscolumns 中选择列名,也会假定它是字符串变量而不是列名。使用纯SQL语句似乎不可能。
您可以尝试存储过程。