只是有一个编写SQL的问题.
在ORACLE DB中,我在一个"APPLE"表中有不同的苹果行,其中"TAGS"包含此类苹果的所有功能.例如:
NAME, TAGS
-----------
APPLE1, FUJI BOXED MEDIUM CALIFORNIA ...
APPLE2, ORGANIC GALA PER_POUND LARGE FLORIDA ...
APPLE3, RED_DELICIOUS MEDIA PACKED ORGANIC ...
APPLE4, LARGE RED_DELICIOUS Mexico ....
APPLE5, PACKED FUJI MEXICO LARGE
Run Code Online (Sandbox Code Playgroud)
现在我想要一个SQL查询来查找具有任何给定标记值的所有行,例如,"FUJI MEDIUM MEXICO".这个SQL怎么样?
这与我正在进行的一个项目有关.在数据库中,为什么我有一个"TAG"列保留所有功能而不是单独的列,这是因为我们知道会引入越来越多的新标签值,所以我们不会添加越来越多的列喜欢将它们保存在一列中,这样代码不需要每次都更改.
谢谢,
插口
您可以重新设计表,使其看起来像这样:
name | tag
----------
Apple1| FUJI
Apple1| BOXED
...
Apple5| PACKED
Apple5| FUJI
Run Code Online (Sandbox Code Playgroud)
然后找到带标签的所有项目fuji,medium或者mexico你可以这样做:
SELECT name from tags where tag in ('FUJI','MEDIUM','MEXICO')
GROUP BY name
Run Code Online (Sandbox Code Playgroud)
您可以找到所有带标签的项目fuji,mediumAND mexico:
SELECT name from tags where tag in ('FUJI','MEDIUM','MEXICO')
GROUP BY name
HAVING count(tag) = 3
Run Code Online (Sandbox Code Playgroud)
(假设(名称,标签)是唯一的)
这适用于任意数量的标签.还可以更轻松地从项目中删除标记,并允许您对标记进行连接和排序.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |