首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MYSQL:导致预期结果不显示的AND语句

MYSQL:导致预期结果不显示的AND语句
EN

Stack Overflow用户
提问于 2019-05-09 20:26:53
回答 3查看 27关注 0票数 -1

当我运行下面的查询时,我希望得到一个结果。

但是,我没有得到任何结果。

代码语言:javascript
复制
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

我已经将问题确定为以下两行

代码语言:javascript
复制
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中是否存在多个值,以使结果符合需要。

EN

回答 3

Stack Overflow用户

发布于 2019-05-09 20:33:04

我认为你的逻辑是不正确的。对于此条件,必须使用运算符OR。否则,条件将为false

代码语言:javascript
复制
{

  (  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%' )


}
票数 2
EN

Stack Overflow用户

发布于 2019-05-09 20:32:48

鉴于listings.listing_idlistings的一个键,您可以使用HAVING子句检查逻辑表达式的和是否大于0。这是因为数值上下文中的逻辑表达式在MySQL中的计算结果为01

由于WHERENULL%s不能等于1,您与user的联接将静默地变为内联接。由于listing_attributes的左连接中的NULL不能使HAVING子句为真,因此还可以将该连接转换为内连接。

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2019-05-09 20:46:16

请使用下面的查询,尝试将条件移动到on子句

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56059439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档