【发布时间】:2016-04-01 02:18:46
【问题描述】:
在一个绝对错误的代码中,我正在尝试执行以下操作:
SELECT * FROM table2 WHERE
table2.items CONTAINS ONLY ELEMENTS FROM table1.item
这有点令人困惑,但我会尝试解释一下:
我有一个表(table1),它有一列,每行有一个元素(我们称它们为 A、B、C、D)
id - [item]
1 - ["A"]
2 - ["B"]
3 - ["C"]
4 - ["D"]
然后我有另一个表(table2),它的列包含如下字符串:
TABLE2
row# - [items]
row1 - ["A, B"]
row2 - ["A, B, C"]
row3 - ["A, B, C, E"]
我想要的是只从 table2 中选择只包含 table1 中存在的元素的行,在这个例子中是 row1 和 row2。
是否可以在不改变表格结构的情况下做到这一点?否则,我需要进行哪些更改?
---------[编辑]-------------
所以我改变了我的结构,以便能够使用 IN 运算符并且它(几乎)工作得很好! 然而,一个新的问题来了。 由于我的 table2 字符串长度不同,我的新 table2 有一些空单元格。
---[更新]---
所以如果我要检查是否
|item1|item2|item3|item4| row |
| A | B | C | | 2 |
row2在table1.item中(同上),我要求的条件之一是
WHERE NULL IN table1.item
事实并非如此!我需要的是仅在项目不为 NULL 时检查项目是否在另一个表中。我会尝试使用它
【问题讨论】:
-
那么新的 table2 结构是什么?对于这个最小的示例,我想您只需要一个唯一标识符 (ID)、一个非唯一值(A、B 或 C 等)和一个 group_id 来关联相关的。
标签: mysql database select optimization database-design