我的sql命令有问题 所以我有一个类型为SET的列,我们称之为 test_set ,我有一行可以有的多个值,比方说 test1 , test2
让我说我有一行 test1 ,
另一个有 test1 和 test2 ,
如何选择所有 test1 的行,(应该返回两行)
那些有 test2 (应该返回第二行)的行
截至目前,我知道你可以做SELECT * WHERE test_set='test1'
但这只返回只有 test1 的行,而不是那些 test1 和 test2 的行。
谢谢!
答案 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'