我知道如何蛮力解决这个问题;我主要是在寻找一个优雅的解决方案来增加我对未来的知识。Oracle SQL:选择多列可以包含多个值的记录
我有一个包含20个代码标志字段的数据表。 (CODE_01,CODE_02,CODE_03,...,CODE_20)
我想找一份这些代码列的任何包含某些值的记录(如:11,12,24,141,等)
我能做到这一点是这样的:
Select * from table
where CODE_01 IN (11, 12, 24, 141)
or CODE_02 IN (11, 12, 24, 141)
or ...
or CODE_20 IN (11, 12, 24, 141);
或者这样:
Select * from table
where 11 IN (CODE_01, CODE_02, ..., CODE_20)
or 12 IN (CODE_01, CODE_02, ..., CODE_20)
or 24 IN (CODE_01, CODE_02, ..., CODE_20)
or 141 IN (CODE_01, CODE_02, ..., CODE_20);
工作和只是在行使复制/粘贴。我不知道是否有什么与此类似:
Select * from table
where (11, 12, 24, 141) IN (CODE_01, CODE_02, ..., CODE_20);
或
Select * from table
where (CODE_01, CODE_02, ..., CODE_20) IN (11, 12, 24, 141);
理论上我可以串联20个领域,并查找与正则表达式,我想,但我打赌这是一个非常低效(和缓慢)的查询来运行。
感谢
天哪,如果您的数据库已正确归一化,那么查询将很容易。说真的,如果这是你正在运行的查询类型,那么你应该有一个'codes'表,每个实体每行一个代码。 –
不幸的是,它不是*我的*数据库。 :)我同意你的观点,数据应该正常化。但是,这是一种商业产品,我拥有只读访问权限。所以没有临时表,不可能修改。 –