mysql - 从表中选择,其中一列仅包含另一列的元素

标签 mysql database select optimization database-design

在一个绝对错误的代码中,我正在尝试做类似的事情:

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 时检查该项目是否在另一个表中。我试着玩那个

最佳答案

是的,这是可能的。一种简单的方法是使用子查询。那将是这样的:

SELECT * FROM table1 WHERE some_value IN (SELECT some_value from table2);

这将返回表 1 中的所有内容,其中 some_value 存在于表 2 的列 some_value

如果你的 table2 是这样的:

|ID | Value | Group_id|
| 1 |   A   |   1     |
| 2 |   B   |   1     |
| 3 |   C   |   1     |
| 4 |   A   |   2     |
| 5 |   B   |   2     |

这将表示第 1 组中的“A、B、C”和第 2 组中的“A、B”。现在,您可以很容易地在不同的行中检索与任何组关联的所有值。据我从您最初的问题中可以看出,该表中不应包含任何 NULL 值(正如您在更新中提到的那样)

现在,要确定仅包含表 1 中存在的元素的所有组,您可以:

SELECT group_id FROM table2 WHERE group_id NOT IN (SELECT group_id FROM table2 WHERE value NOT IN (SELECT value from table1));

这会生成一组包含 table1 中所有值的结果,然后返回所有具有该组之外的值的 group_id,然后取反。有点复杂,可能有更好的方法...

关于mysql - 从表中选择,其中一列仅包含另一列的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473082/

相关文章:

c - FIFO 管道在 select() 中始终可读

mysql - 按查询字符串搜索顺序

java - Hibernate - 在运行时更改连接字符串

database - IBM-Watson 云产品中输入要求的数据格式是什么?

Java重复条目和性能问题

MySQL 选择指令

java - 如何在使用 LOAD DATA 命令时跳过 csv 文件的行?

Mysql统计有多少答案是正确的

mysqldump 兼容模式 postgresql 不工作

php - 连接 phpMyAdmin MySQL 数据库时出现问题