我有一个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
这样做的正确方法是什么?
答案 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 演示