Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:连接另一个缺少元组的表_Sql_Oracle_Oracle9i - Fatal编程技术网

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'