查询匹配或返回空连接

时间:2014-12-09 04:20:02

标签: sql null case

我有两个表,一个是与客户订购的订单表,订购的商品 第二个表是显示项目标记的项目信息。我确保沿项目的标签和标记在其上的项目都在帐户上,它们不需要在同一订单号11 12上。 BC-客户 MC订单号 客户帐户上的oitem-item

http://www.sqlfiddle.com/#!2/c6906c/4

CREATE TABLE orders
    (`bc` int, `mc` int,`OITEM` varchar(3))
;

INSERT INTO orders
    (`BC`, `MC`,`OITEM`)
VALUES
    (1, 11, 'HPB'),
    (1, 11, 'HPU'),
    (1, 11, 'TCU'),
    (1, 11, 'CPB'),
    (1, 11, 'HPU'),
    (1, 12, 'CPS'),
    (2, 11, 'CPA'),
    (2, 12, 'CPS'),
    (2, 12, 'TCU')
;

CREATE TABLE item_desc
    (`item` varchar(3), `tag` varchar(3))
;

INSERT INTO item_desc
    (`item`, `tag`)
VALUES
    ('FSU', 'CPS'),
    ('HPU', 'CPB'),
    ('FSU', 'CPB'),
    ('TCU', 'CPA')
;

我需要返回一个匹配项或者显示空值:这是我写的查询问题是我显示匹配和空值,因为CPS可以标记为HPU或FSU。

select a.bc, a.mc, a.oitem as CP, b.tag, b.item, c.oitem as CP_Item
from orders a
left join item_desc b
on a.oitem = b.tag

left join orders c
on b.item = c.oitem

where a.oitem like 'CP%'
group by a.bc,a.mc,a.oitem,b.tag,b.item,c.oitem;

目前结果显示:

BC  MC  CP  TAG ITEM    CP_ITEM
1   11  CPB CPB FSU     (null)
1   11  CPB CPB HPU     HPU
1   12  CPS CPS FSU     (null)
2   11  CPA CPA TCU     TCU
2   12  CPS CPS FSU     (null)

我希望最终结果向我显示匹配项,如果没有匹配项而不是null但不是null和匹配,因为一个匹配项使帐户有效:

BC  MC  CP  TAG ITEM    CP_ITEM
1   11  CPB CPB HPU     HPU
1   12  CPS CPS FSU     (null)
2   11  CPA CPA TCU     TCU
2   12  CPS CPS FSU     (null)

1 个答案:

答案 0 :(得分:1)

你几乎就在那里。只需从您的GROUP BY中删除b.item,c.oitem,即可全部设置。

select a.bc, a.mc, a.oitem as CP, b.tag, b.item, c.oitem as CP_Item
from orders a
left join item_desc b
on a.oitem = b.tag

left join orders c
on b.item = c.oitem

where a.oitem like 'CP%'
group by a.bc,a.mc,a.oitem,b.tag

http://www.sqlfiddle.com/#!2/c6906c/8