选择至少包含一个集成员

时间:2016-05-06 00:16:58

标签: mysql sql

我的sql命令有问题 所以我有一个类型为SET的列,我们称之为 test_set ,我有一行可以有的多个值,比方说 test1 test2

让我说我有一行 test1
另一个有 test1 test2

如何选择所有 test1 的行,(应该返回两行)
那些有 test2 (应该返回第二行)的行

截至目前,我知道你可以做SELECT * WHERE test_set='test1'
但这只返回只有 test1 的行,而不是那些 test1 test2 的行。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我正确理解你,你有一个包含逗号分隔值的VARCHAR列。

在这种情况下,LIKE会对你有用。

SELECT * WHERE test_set LIKE '%test1%'

如果可以,您可能需要考虑更改数据库架构 - 例如,有一个单独的" SETS"引用原始表的表。

实施例

CREATE TABLE MY_DATA (ID INT NOT NULL, NAME VARCHAR(255) NULL)
CREATE TABLE SETS (ID INT NOT NULL, MY_DATA_ID INT NOT NULL, SET_ITEM VARCHAR(50) NOT NULL)

SELECT * 
FROM MY_DATA D
     JOIN SETS S
          ON S.MY_DATA_ID = D.ID
WHERE S.SET_ITEM = 'test1'