sql multiple in join

时间:2016-08-30 17:11:49

标签: mysql sql

A有一个名为advert_property

的表格

pic1

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

我写了这个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_value =“Манчего”并且具有property_id = 2和property_value =“козий”的idvert。 SQL请求返回null,我应该如何更改我的SQL请求。谢谢!

3 个答案:

答案 0 :(得分:0)

您尝试执行的查询永远不会给您一个结果,因为它试图获取属性为id = 1且属性id = 2的行

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

您需要查看您的具体情况。

我所需要的条件如下(id为1或id为2):

试试这个:

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

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

答案 1 :(得分:0)

您无法返回*同时为property_id1的所有列2,因为记录不能包含两个值相同的领域。但是,您可以返回property_id1 2的记录。然后你可以让它只返回DISTINCT 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 = "козий")

答案 2 :(得分:0)

假设我正确理解了您的问题并且您希望返回所有 属性的adverts,那么有几种方法可以使用多个joinsexistsingroup by ...

执行此操作

以下是使用多个joins的方法:

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 = 'козий'