SQL多个where条件的联接查询

3

我有一个名为advert_property的表。

pic1

我还有一个表advert,但不重要,广告属性通过advert_property表中的advert_id列连接到广告。

我编写了以下SQL查询:

SELECT * 
FROM `advert` 
JOIN advert_property ON advert.id = advert_property.advert_id 
WHERE (advert_property.property_id = 1 
       AND advert_property.property_value = "Манчего") 
  AND (advert_property.property_id = 2 
       AND advert_property.property_value = "козий")

我想要得到具有特定属性的广告,例如:我想要一个属性property_id = 1且属性值为"Манчего",同时又具有属性property_id = 2且属性值为"козий"的广告。但是我的SQL查询返回了空值,我该如何更改SQL查询语句呢?谢谢!

3个回答

0

您正在尝试执行的查询将永远无法给出结果,因为它试图获取具有属性 id = 1 和属性 id = 2 的行。

对于同一行,永远不会有两个 property_ids(1,2)。

您需要检查您的 Where 条件。

也许您需要在 where 条件中使用以下内容(id 将是 1 或 2):

请尝试:

(advert_property.property_id = 1 AND advert_property.property_value = "Манчего") 

或者

(advert_property.property_id = 2 AND advert_property.property_value = "козий")

我明白我应该重写我的where条件,但是怎么做呢? - Nikita Glusuchenko

0

你不能返回所有的列*,其中property_id既是1又是2,因为一条记录不能有相同字段的两个值。但是你可以返回property_id1或者2的记录。然后你可以只返回满足以下条件的不同的advert_id

SELECT DISTINCT advert_id 
FROM `advert` JOIN advert_property ON advert.id=advert_property.advert_id 
WHERE (advert_property.property_id = 1 AND advert_property.property_value = "Манчего") 
    OR (advert_property.property_id = 2 AND advert_property.property_value = "козий")

0

假设我正确理解了您的问题,并且您想要返回所有具有两个属性的广告,那么可以使用多个连接存在分组等方法来实现。

以下是使用多个连接的方法:

SELECT a.* 
FROM `advert` a 
    JOIN advert_property ap ON a.id=ap.advert_id 
        AND ap.property_id = 1 AND ap.property_value = 'Манчего'
    JOIN advert_property ap2 ON a.id=ap2.advert_id 
        AND ap2.property_id = 2 AND ap2.property_value = 'козий'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接