Sql 从Oracle数据库中以逗号分隔的值获取特定值

Sql 从Oracle数据库中以逗号分隔的值获取特定值,sql,jdbc,oracle10g,select-query,Sql,Jdbc,Oracle10g,Select Query,我有一个名为DUMMY_TAB的表,它有一列COLOR,其中包含逗号分隔的值,如红、蓝、白、绿、黄。现在我想检查是否存在多种颜色,我不知道值的存储顺序 我使用了如下查询: SELECT COLOR from DUMMY_TAB WHERE (COLOR LIKE '%GREEN%' OR COLOR LIKE '%VOILET%' OR COLOR LIKE '%ORANGE%'); 但查询并没有返回任何内容。我可以在这里得到任何帮助。您应该使用连接表。SQL具有这种用于存储列表的优秀数据结

我有一个名为
DUMMY_TAB
的表,它有一列
COLOR
,其中包含逗号分隔的值,如
红、蓝、白、绿、黄
。现在我想检查是否存在多种颜色,我不知道值的存储顺序

我使用了如下查询:

SELECT COLOR from DUMMY_TAB WHERE (COLOR LIKE '%GREEN%' OR COLOR LIKE '%VOILET%' OR COLOR LIKE '%ORANGE%'); 

但查询并没有返回任何内容。我可以在这里得到任何帮助。

您应该使用连接表。SQL具有这种用于存储列表的优秀数据结构。它叫桌子。逗号分隔的值不是正确的方法

但是,有时候,你别无选择。您正在寻找:

where ',' || 'GREEN' || ',' like ',' || COLOR || ','

使用分隔符可以确保您可以在列表的开头和结尾找到值。

您肯定违反了Justin Cave强调的规范化

最好的做法是将它们存储在表的列中,而不是全部存储在一个表中

我无法复制你的问题陈述。见证据


除了在列中存储逗号分隔的列表是违反基本规范化的可怕做法之外,如果表中包含如您所述的数据,则发布的查询将返回该行。如果查询未返回行,则数据不得包含字符串
绿色
。当您搜索大写值时,表中的数据可能是小写的?我的行有大写逗号分隔值,与我在问题中所问的相同。与绿色、蓝色和黄色一样,如果数据和查询与您显示的完全相同,则查询将返回一行。向我们展示一个自包含的示例,它复制了您的问题,我们可以在我们的机器上运行。否则,几乎不可能调试问题所在
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