复杂的SQL查询语法

问题描述

我想对mysql数据库进行查询,以获取可用的产品, sale_id为any1或any2或二者兼有的商品,并且属于 id a或b或同时来自以下两者的类别表category_product ,其中具有((category_product表))2列 product_id和category_id ,因为我的产品可以属于多个类别。

这是我的查询

SELECT * 
  FROM products 
 WHERE available = 1 
   AND sale_id = 3 
    OR sale_id = 4 
   AND id IN (
   SELECT product_id 
     FROM category_product 
    WHERE category_id = 2 
       OR category_id = 3
)

但这没用!!

结果是,它得到了第一个查询,将其中一个可用的= 1和sale_id = 3或4或两者都纠正了。但是它得到的产品不属于2或3或两者都属于

请帮忙!!!

解决方法

我认为您只需要括号或IN

SELECT p.* 
FROM products p
WHERE p.available = 1 AND
      p.sale_id IN (3,4) AND
      p.id IN (SELECT product_id 
               FROM category_product cp
               WHERE category_id IN (2,3)
              );

您似乎正在学习SQL或至少是布尔表达式。 ANDOR不会自动执行您想要的操作。混合它们时,请使用括号,直到掌握了要诀。

您的条件解析为:

WHERE (p.available = 1 AND p.sale_id = 3) OR
      (p.sale_id = 4 AND
       p.id IN (SELECT product_id 
                FROM category_product cp
                WHERE category_id IN (2,3)
               )
      )

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...