【问题标题】:MySQL SELECT statement inside CASECASE 中的 MySQL SELECT 语句
【发布时间】:2014-03-30 05:24:11
【问题描述】:

我有一个PRODUCTS 表,其中包含产品记录或子产品记录。子产品通过在 HIGHERCATALOGID 列中有一个条目来表示,而对于产品,HIGHERCATALOGID 列是 NULL。我正在尝试编写一个查询,如果 catalogid 指向产品记录,则输出产品名称;如果 catalogid 指向子产品,则输出父产品的名称。这是我尝试做的:

SELECT p.catalogid, p.highercatalogid, oi.orderid
CASE
    WHEN highercatalogid is null then cname\
ELSE
    SELECT cname from products p1 where p.highercatalogid=p1.catalogid
END as name
FROM products p, oitems oi
WHERE p.catalogid=oi.catalogid

但是,这会导致错误。

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“case WHEN highcatalogid 为 null 然后 cname else select cname from products p”附近使用正确的语法

这样做的正确方法是什么?

【问题讨论】:

    标签: mysql sql select case


    【解决方案1】:
    SELECT p.catalogid, p.highercatalogid, oi.orderid 
    

    ,

    CASE
    WHEN highercatalogid is null then cname
    ELSE
    SELECT cname from products p1 where p.highercatalogid=p1.catalogid
    END as name
    FROM products p, oitems oi 
    WHERE p.catalogid=oi.catalogid
    

    【讨论】:

    • 你应该在oi.orderid之后添加一些文字说明问题是缺少,,这样会更清楚。
    • 谢谢。我修改了答案
    【解决方案2】:

    你可以这样试试

    SELECT p.catalogid, p.highercatalogid, oi.orderid,
           COALESCE(p2.cname, p.cname) cname
      FROM oitems oi JOIN products p
        ON oi.catalogid = p.catalogid LEFT JOIN products p2
        ON p.highercatalogid = p2.catalogid
    

    这里是SQLFiddle演示

    【讨论】:

    • 谢谢! COALESCE 操作符我不熟悉,这正是医生吩咐的。
    • @user3358413 如果这回答了您的问题,最好是点击答案左上角的勾号接受答案 - 谢谢!
    猜你喜欢
    • 2023-04-07
    • 2014-12-05
    • 2012-02-05
    • 2012-10-03
    • 2015-02-27
    • 2012-05-07
    • 2013-03-23
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多