查找MySQL表中是否存在列数据
我有一个列表数据库。我还有一个清单属性数据库,如下所示:查找MySQL表中是否存在列数据,mysql,Mysql,我有一个列表数据库。我还有一个清单属性数据库,如下所示: id | listing_id | attribute_id 基本上,listings_attributes表存储分配给特定列表的属性 我想根据列表的属性筛选它们 例如,我希望找到属性_id为1的所有列表。那很容易 SELECT l.id FROM listings AS l LEFT JOIN listings_attributes AS la ON l.id = la.listing_id WHERE la.at
id | listing_id | attribute_id
基本上,listings_attributes表存储分配给特定列表的属性
我想根据列表的属性筛选它们
例如,我希望找到属性_id为1的所有列表。那很容易
SELECT l.id FROM listings AS l
LEFT JOIN listings_attributes AS la ON l.id = la.listing_id
WHERE la.attribute_id = 1
GROUP BY l.id
我的问题是如何提取属性_id为1和2的列表。如果有属性_id为1但属性_id为2的列表,我不希望从数据库中取出这些列表
但是,如果有属性_id为1、2和3的列表,我希望将它们从数据库中拉出
这是我正在使用的SQL,但是属性_id之间的“OR”不起作用,“and”也不起作用
我需要什么代码才能使其按照我上面解释的方式工作?在查找多个属性时,您需要使用带有
或的分组依据,以确保属性都存在于列表\u attributes
表中,就像您已经拥有的那样。然后添加一个HAVING
子句以确保多行匹配。像这样:
SELECT l.id FROM listings AS l
LEFT JOIN listings_attributes AS la ON l.id = la.listing_id
WHERE (la.attribute_id = 1 OR la.attribute_id = 2)
GROUP BY l.id HAVING COUNT(*) = 2
谢谢你,克里斯!是否有办法使HAVING COUNT(*)=2更具体?事实上,我的代码中有多个左连接,我认为这可能会混淆。事实上,我认为我只是做了一些错误的测试。看起来它起作用了:)谢谢你的帮助!
SELECT l.id FROM listings AS l
LEFT JOIN listings_attributes AS la ON l.id = la.listing_id
WHERE (la.attribute_id = 1 OR la.attribute_id = 2)
GROUP BY l.id HAVING COUNT(*) = 2