用于检查20列中的一组值的SQL

时间:2014-03-20 22:24:04

标签: sql db2

我必须检查大约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')

有没有更有效的替代方式?

2 个答案:

答案 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语句似乎不可能。

您可以尝试存储过程。