当我运行下面的查询时,我希望得到一个结果。
但是,我没有得到任何结果。
SELECT listings.*
FROM `listings`
LEFT JOIN users
ON listings.user_id = users.user_id
LEFT JOIN listing_attributes
ON listings.listing_id = listing_attributes.listing_id
WHERE users.account_status = 1
AND ( listing_attributes.name LIKE 'collection_city' AND listing_attributes.content LIKE '%d%' )
AND ( listing_attributes.name LIKE 'collection_post_code' AND listing_attributes.content LIKE '%e%' )
GROUP BY listings.listing_id
我已经将问题确定为以下两行
AND ( listing_attributes.name LIKE 'collection_city' AND listing_attributes.content LIKE '%d%' )
AND ( listing_attributes.name LIKE 'collection_post_code' AND listing_attributes.content LIKE '%e%' )
如果我删除这两行中的任何一行,就会得到预期的结果。
我认为我在()中包含结果的方式有问题。
本质上,我希望检查listing_attributes中是否存在多个值,以使结果符合需要。
发布于 2019-05-09 20:33:04
我认为你的逻辑是不正确的。对于此条件,必须使用运算符OR
。否则,条件将为false
。
{
( listing_attributes.name LIKE 'collection_city' AND listing_attributes.content LIKE '%d%' )
OR ( listing_attributes.name LIKE 'collection_post_code' AND listing_attributes.content LIKE '%e%' )
}
发布于 2019-05-09 20:32:48
鉴于listings.listing_id
是listings
的一个键,您可以使用HAVING
子句检查逻辑表达式的和是否大于0
。这是因为数值上下文中的逻辑表达式在MySQL中的计算结果为0
或1
。
由于WHERE
为NULL
%s不能等于1
,您与user
的联接将静默地变为内联接。由于listing_attributes
的左连接中的NULL
不能使HAVING
子句为真,因此还可以将该连接转换为内连接。
SELECT listings.*
FROM listings
INNER JOIN users
ON listings.user_id = users.user_id
INNER JOIN listing_attributes
ON listings.listing_id = listing_attributes.listing_id
WHERE users.account_status = 1
GROUP BY listings.listing_id
HAVING sum(listing_attributes.name LIKE 'collection_city'
AND listing_attributes.content LIKE '%d%') > 0
AND sum(listing_attributes.name LIKE 'collection_post_code'
AND listing_attributes.content LIKE '%e%') > 0;
发布于 2019-05-09 20:46:16
请使用下面的查询,尝试将条件移动到on
子句
SELECT listings.*
FROM `listings`
LEFT JOIN users
ON listings.user_id = users.user_id AND users.account_status = 1
LEFT JOIN listing_attributes
ON listings.listing_id = listing_attributes.listing_id AND ( listing_attributes.name LIKE 'collection_city' AND listing_attributes.content LIKE '%d%' ) AND ( listing_attributes.name LIKE 'collection_post_code' AND listing_attributes.content LIKE '%e%' )
GROUP BY listings.listing_id;
https://stackoverflow.com/questions/56059439
复制相似问题