如果id在逗号分隔的单元格中添加元组

时间:2016-06-27 19:15:47

标签: sql oracle

我使用的是Oracle 11g,任何帮助都会很棒

我有一张表如下

IDS
-----------
1
1,2
1,2,4
1,2,5
1,2,6
1,3,7
1,3,8
1,3,9

我需要返回包含给定值的所有行

因此,对于值2,将返回以下内容

1,2
1,2,4
1,2,5
1,2,6

非常感谢提前

2 个答案:

答案 0 :(得分:2)

虽然我不建议存储以逗号分隔的列表,但这里有server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl-certs/a.cert; ssl_certificate_key /etc/nginx/ssl-certs/a.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_client_certificate /etc/nginx/ssl-certs/ca.pem; ssl_verify_client on; location /location1 { [..] } } server { listen 444; ssl on; ssl_certificate /etc/nginx/ssl-certs/a.cert; ssl_certificate_key /etc/nginx/ssl-certs/a.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_verify_client off; location /location2 { [..] } } 使用concat的一个选项:

like

修改 - 由于您使用的是select * from yourtable where concat(concat(',', ids), ',') like '%,2,%' ,因此您需要使用多个oracle语句...

答案 1 :(得分:1)

将逗号分隔列表中的ID存储起来是个坏主意,原因有很多:

  • SQL没有很好的字符串函数(虽然Oracle比大多数都好)。
  • 将数字ID存储为字符串是一个坏主意。
  • 在一个列中存储多个值是一个坏主意。
  • 不宣布外键关系是一个坏主意。
  • SQL有一个很好的存储列表结构;它被称为表(在这种情况下是联结表)。
  • Oracle有专门的构造,例如更合适的嵌套表。

也就是说,有时候我们会遇到其他人不好的设计决定。您可以使用like

select t* 
from t
where ',' || ids || ',' like '%,2,%';