Oracle SQL:连接另一个缺少元组的表
我有以下两个表,一个存储订单信息,一个存储键值信息 键Oracle SQL:连接另一个缺少元组的表,sql,oracle,oracle9i,Sql,Oracle,Oracle9i,我有以下两个表,一个存储订单信息,一个存储键值信息 键COLOR\u CD没有CD=D。我想将这两个表连接起来,以获得所有与MASS\u DECODE表中未找到的键值对无关的订单 我能得到一些帮助吗 订单信息 ORDER_NUMBER |COLOR_CD | ----------------|-----------| 1 |A | 2 |B | 3 |C
COLOR\u CD
没有CD=D
。我想将这两个表连接起来,以获得所有与MASS\u DECODE
表中未找到的键值对无关的订单
我能得到一些帮助吗
订单信息
ORDER_NUMBER |COLOR_CD |
----------------|-----------|
1 |A |
2 |B |
3 |C |
4 |D |
大规模解码
KEY |CD |VALUE |
------------|---------------|-----------|
COLOR_CD |A |Green |
COLOR_CD |B |Blue |
COLOR_CD |C |Red |
SIZE_CD |A |Large |
SIZE_CD |B |Medium |
SIZE_CD |C |Small |
SQL:
结果:
ORDER_NUMBER |CD |VALUE |
----------------|-----------|-----------|
1 |A |Green |
2 |B |Blue |
3 |C |Red |
预期:
ORDER_NUMBER |CD |VALUE |
----------------|-----------|-----------|
1 |A |Green |
2 |B |Blue |
3 |C |Red |
4 |D |NULL |
编辑:很抱歉,我为我的表格提供了不正确的信息。已更正。您的列名不明确。在两个表中有两列名称相同,那么where子句中的键指的是哪一列?我认为在以后的Oracle版本中,这实际上会给您一个错误。试试这个:
select oi.order_number, oi.color_cd, md.value
from order_infomation oi
left outer join mass_decode md
on (oi.color_cd = md.cd)
where oi.key = 'KEY_A';
编辑:
根据你对@billy的回复,这听起来好像对你不起作用。您还可以尝试将键谓词放入join子句:
select oi.order_number, oi.color_cd, md.value
from order_infomation oi
left outer join mass_decode md
on (oi.color_cd = md.cd) and oi.key = 'KEY_A';
upd:
根据您的更新:
select *
from order_information oi
left join mass_decode md
on oi.color_cd = md.cd
where md.key = 'COLOR_CD' or md.key is null;
这应该可以:
SELECT
order_number,
color_cd AS cd,
(
SELECT value FROM mass_decode m2 WHERE m2.key = o.key AND m2.cd = o.color_cd
) AS value
FROM order_information o
WHERE o.key = 'KEY_A'
猜测一下:试试
where order_information.key='key_a'
@beherenow非常感谢您精心制作的小提琴。您需要在键
列上添加连接谓词-否则您将得到七行而不是四行。把我的小提琴收起来comments@eaolson很抱歉,我为我的问题提供了不正确的信息。表和SQL如下..很抱歉,我为我的问题提供了不正确的信息。表和SQL如下..这是genius。非常感谢你的帮助。
select *
from order_information oi
left join mass_decode md
on oi.color_cd = md.cd
where md.key = 'COLOR_CD' or md.key is null;
SELECT
order_number,
color_cd AS cd,
(
SELECT value FROM mass_decode m2 WHERE m2.key = o.key AND m2.cd = o.color_cd
) AS value
FROM order_information o
WHERE o.key = 'KEY_A'