查找MySQL表中是否存在列数据

时间:2010-08-18 03:05:48

标签: mysql

我有一个列表数据库。我还有一个listing_attributes数据库,如下所示:

id | listing_id | attribute_id

基本上,listings_attributes表存储分配给某个列表的属性。

我想根据他们拥有的属性来过滤列表。

一个例子是我想要找到属性为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

我的问题是如何提取属性为1和2的列表。如果列表中的attribute_id为1但没有attribute_id为2,我不希望这些是退出了数据库。

但是,如果列表中的attribute_id为1,2和3,我希望将这些列表从数据库中拉出来。

这是我正在玩的SQL,但是attribute_id之间的“OR”不起作用,“AND”也没有。

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

我需要哪些代码才能使其按照我上面解释的方式工作?

1 个答案:

答案 0 :(得分:1)

在查找多个属性时,您需要使用GROUP BYOR来确保listings_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