我有两个表,一个是与客户订购的订单表,订购的商品 第二个表是显示项目标记的项目信息。我确保沿项目的标签和标记在其上的项目都在帐户上,它们不需要在同一订单号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)
答案 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