A有一个名为advert_property
我有一个表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请求。谢谢!
答案 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_id
和1
的所有列2
,因为记录不能包含两个值相同的领域。但是,您可以返回property_id
为1
或 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
,那么有几种方法可以使用多个joins
,exists
,in
,group 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 = 'козий'