2016-08-30 62 views
3

一个有一个表称为advert_propertySQL多凡加入

pic1

而且我有一个表advert,这并不重要,广告性质的advert_idadvert_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 =“Манчего”的idvert并有property_id = 2和property_value =“козий”。 SQL请求返回null,我应该如何更改我的SQL请求。谢谢!

回答

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

非常感谢,它适合我! –

0

查询您正试图执行永远不会给你一个结果,因为它正在试图获得财产ID = 1和财产ID = 2

对于同一行的行,绝不是两个property_ids( 1,2)。

你需要检查你的条件。

我是你在条件如下需要的东西(无论是ID为1或ID将是2):

试试这个:

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

OR

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

我明白我应该重写我的地方的条件,但如何? –

+0

我已经更新了我的答案。 –

0

您无法返回所有列*,其中property_id均为12,因为记录不能有相同字段的两个值。但是,您可以返回property_id12的记录。然后,您可以把它只有返回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 = "козий")