我有一个名为DUMMY_TAB
的表,其中有一列COLOR
,其中包含逗号分隔值RED,BLUE,WHITE,GREEN,YELLOW
。现在我想检查是否存在多种颜色,并且我不知道存储值的顺序。
我使用了以下查询:
SELECT COLOR from DUMMY_TAB WHERE (COLOR LIKE '%GREEN%' OR COLOR LIKE '%VOILET%' OR COLOR LIKE '%ORANGE%');
但查询没有返回任何内容。我能在这里得到任何帮助。
答案 0 :(得分:1)
您应该使用联结表。 SQL具有用于存储列表的这种出色的数据结构。它被称为表。逗号分隔值不是正确的方法。
但是,有时候,你别无选择。您正在寻找:
where ',' || 'GREEN' || ',' like ',' || COLOR || ','
使用分隔符可确保您可以在列表的开头和结尾找到值。
答案 1 :(得分:0)
Justin Cave强调,你肯定违反了规范化。
最佳做法是将它们存储在表的列中,而不是全部存储在一列中。
我无法复制您的问题陈述。见证明here
create table temp (col varchar2(30));
insert into temp values('RED,BLUE,WHITE,GREEN,YELLOW');
SELECT * from temp WHERE col LIKE '%GREEN%';
COL
RED,BLUE,WHITE,GREEN,YELLOW