在两个表上进行一次选择,其中包含 NULL 而不是 null

Posted

技术标签:

【中文标题】在两个表上进行一次选择,其中包含 NULL 而不是 null【英文标题】:One select on two tables with NULL and not null 【发布时间】:2013-06-21 13:13:22 【问题描述】:

我尝试从两个表中选择并使用 WHERE 将一些数据从一个表中放到另一个表中 (PL/SQL)

我有两张这样的桌子:

表1

ID  NAME  COLOR  COMPANY_SHORT_NR
1   a     Green  1
2   b     Red    23
3   c     Blue   null
4   a     Green  null
5   g     Green  1

表2

ID  SHORT COMP_NAME
1   1     company_name_1 
2   23    comapny_name_2

现在我想从表 1 中获取所有带有公司名称的数据,如果它为 null 获取信息,那么它就是 null

1   a     Green  company_name_1 
2   b     Red    comapny_name_2 
3   c     Blue   null
4   a     Green  null
5   g     Green  company_name_1 

我试过这样做:

select ID
      ,NAME
      ,COLOR
      ,COMPANY_SHORT_NR
from table1
    ,table2
where COMPANY_SHORT_NR = SHORT 

但这给我的不是空值:

1   a     Green  company_name_1 
2   b     Red    comapny_name_2 
5   g     Green  company_name_1 

如果我这样使用:

select ID
      ,NAME
      ,COLOR
      ,COMPANY_SHORT_NR
from table1
    ,table2
where COMPANY_SHORT_NR = SHORT or COMPANY_SHORT_NR is null

我有成千上万的记录... 如果我只使用IS NULL,那么它只会返回我应该的 2 行。

我在哪里犯错了?

【问题讨论】:

【参考方案1】:

您必须使用left join,如下所示

select ID
      ,NAME
      ,COLOR
      ,COMPANY_SHORT_NR
from table1 t1
left join table2 T2 on t1.COMPANY_SHORT_NR = t2.SHORT 

【讨论】:

很高兴能为您提供帮助。【参考方案2】:

你需要 OUTER JOIN

select ID
      ,NAME
      ,COLOR
      ,COMPANY_SHORT_NR
from table1
     LEFT OUTER JOIN table2 ON ( COMPANY_SHORT_NR = SHORT )

【讨论】:

【参考方案3】:

加入表格不是更好吗?喜欢SELECT ID, NAME, COLOR, COMPANY_SHORT_NR FROM table1 t1 LEFT JOIN table2 t2 on t2.SHORT = t1.COMPANY_SHORT_NR WHERE 1

【讨论】:

以上是关于在两个表上进行一次选择,其中包含 NULL 而不是 null的主要内容,如果未能解决你的问题,请参考以下文章

在数据库表级别而不是函数上进行约束

仅选择必须满足两个条件的记录

只用光标选择行一次

链表中环的入口结点

检查非阻塞发送是不是成功

从表中选择不同的记录并执行重复行的列总和(托盘、总和)。并显示重复的行一次[关闭]