【问题标题】:how to call subquery inside WHEN Clause - Mysql如何在 WHEN 子句中调用子查询 - Mysql
【发布时间】:2016-11-06 18:40:39
【问题描述】:

我有两张桌子:

产品

id name  category
1  AAA    BBB
2  CCC    DDD
3  EEE    FFF

秩序

id id_product     date
1      2       10/11/16
2      2       06/16/16
3      3       12/09/16
4      1       02/06/16
5      3       15/10/16

为了知道产品是否有订单,我创建了这个选择查询:

SELECT id,name ,category 

CASE WHEN id IN (select id_product from Ordre) then 'Y'
       ELSE 'N' END AS has_ordre

FROM product;

但这对我不起作用,事实上我想创建一个包含产品信息的视图,并且还有“has_ordre”列来检查产品是否有订单。

你有什么建议吗? 我是 Mysql 的新手 提前致谢。

【问题讨论】:

  • 您在类别后错过了一个逗号.. 尝试 SELECT id,name ,category , CASE WHEN ...
  • 感谢@scaisEdge 你是对的,我错过了逗号

标签: mysql sql sqlite


【解决方案1】:

您可以在没有子查询的情况下执行您需要的操作,方法是在两个表上进行连接并在 order.id_product 上执行 COUNT(),这将计算每个产品的订单数量。注意:此查询将完全(按设计)排除没有订单的产品。此外,此特定查询的结果将显示每种产品的订单数量:

SELECT p.id, p.name, p.category, COUNT(o.id_product) AS num_orders
FROM product p
    RIGHT JOIN order o
        ON p.id = o.id_product
GROUP BY p.id
ORDER BY num_orders

如果您想显示所有订单,无论它们是否有活动订单,您可以将 RIGHT JOIN 更改为 LEFT JOIN:

Here is a fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多