Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找MySQL表中是否存在列数据_Mysql - Fatal编程技术网

查找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