SELECT * FROM tbl_houses
WHERE
(SELECT HousesList
FROM tbl_lists
WHERE tbl_lists.ID = '123') LIKE CONCAT('% ', tbl_houses.ID, '#')
它仅从tbl_houses
内的最后一个tbl_houses.ID
tbl_lists.HousesList
中选择行
我需要它来选择tbl_houses
中存在来自tbl_lists.HousesList
的任何ID的所有行
答案 0 :(得分:2)
如果不确切知道您的数据是什么样子很难说,但如果它只匹配最后一个ID,可能是因为您在字符串的末尾没有任何%
,以便允许列表在比赛结束后继续。
答案 1 :(得分:0)
这是zeroth normal form中的数据库吗?我闻到了什么?
如果您有包含值列表的属性,例如HousesList
属性,则应将其存储为distinct values in a separate relation。
CREATE TABLE house (
id VARCHAR NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE list (
id VARCHAR NOT NULL,
PRIMARY KEY (id),
);
CREATE TABLE listitem (
list_id VARCHAR NOT NULL,
FOREIGN KEY list_id REFERENCES list (id),
house_id VARCHAR NOT NULL,
FOREIGN KEY house_id REFERENCES house (id),
PRIMARY KEY (list_id, house_id)
);
然后,您的不同房屋列表值每个都有自己的元组,并且可以像任何其他元素一样被选中。
SELECT house.*
FROM house
JOIN listitem
ON listitem.house_id = house.id
WHERE
listitem.list_id = '123'