CASE中的MySQL SELECT语句

时间:2014-02-27 01:42:11

标签: mysql sql select case

我有一个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服务器版本对应的手册,以便在'case WHEN highcatalogid为null之后使用正确的语法然后cname else从第2行的产品p'中选择cname

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你可以这样试试

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 演示