Sql Select语句用于从Oracle中的其他表中选择超越值

Sql Select语句用于从Oracle中的其他表中选择超越值,sql,oracle,select,inner-join,Sql,Oracle,Select,Inner Join,我有几个表是这样的: 表1 表2 查询的结果应该是 如果条件公司=ABC 不要将您的条件作为WHERE子句的一部分,而是将其作为表1和表2之间左连接的条件 SELECT * FROM table1 a LEFT JOIN table2 b ON a."registration#" = b."registration#" AND b.company = 'ABC' --parameterise this I.e. @companyName 不要忘记参数化您的查询

我有几个表是这样的:

表1

表2

查询的结果应该是

如果条件公司=ABC


不要将您的条件作为WHERE子句的一部分,而是将其作为表1和表2之间左连接的条件

SELECT * FROM
  table1 a
  LEFT JOIN
  table2 b
  ON
    a."registration#" = b."registration#" AND
    b.company = 'ABC' --parameterise this I.e. @companyName
不要忘记参数化您的查询

不要在列名中使用—这会使它们在其他系统中使用时在背面很麻烦,特别是因为它们需要转义,而且在oracle中转义列意味着您必须继续使用。应该避免任何使查询更脆弱的事情

在oracle的某些版本中,它对编写条件的方式很敏感,希望这只是古代版本中的一个bug

如果你对奇怪或意外的结果感到困扰,请尝试:

LEFT JOIN table2 ....
ON 'ABC' = table2.companyname

不要将您的条件作为WHERE子句的一部分,而是将其作为表1和表2之间左连接的条件

SELECT * FROM
  table1 a
  LEFT JOIN
  table2 b
  ON
    a."registration#" = b."registration#" AND
    b.company = 'ABC' --parameterise this I.e. @companyName
不要忘记参数化您的查询

不要在列名中使用—这会使它们在其他系统中使用时在背面很麻烦,特别是因为它们需要转义,而且在oracle中转义列意味着您必须继续使用。应该避免任何使查询更脆弱的事情

在oracle的某些版本中,它对编写条件的方式很敏感,希望这只是古代版本中的一个bug

如果你对奇怪或意外的结果感到困扰,请尝试:

LEFT JOIN table2 ....
ON 'ABC' = table2.companyname
您不希望为此使用内部联接,而是希望使用左联接并将公司的筛选器置于联接条件中。由于您还希望替换表2中的电话和分机(如果存在),因此如果返回表1中的值,您需要使用或类似的方法来覆盖这些值:

select 
  t1."Registration#",
  t1.Name,
  coalesce(t2.PersonalPhone, t1.Phone) as Phone,
  coalesce(t2.Extension, t1.Extension) as Extension, 
  t2.Company
from Table1 t1
left join Table2 t2
  on t1."Registration#" = t2."Registration#"
  and t2.Company = 'ABC'
order by t1."Registration#";
这是一本书

您不希望为此使用内部联接,而是希望使用左联接,并将公司的筛选器置于联接条件中。由于您还希望替换表2中的电话和分机(如果存在),因此如果返回表1中的值,您需要使用或类似的方法来覆盖这些值:

select 
  t1."Registration#",
  t1.Name,
  coalesce(t2.PersonalPhone, t1.Phone) as Phone,
  coalesce(t2.Extension, t1.Extension) as Extension, 
  t2.Company
from Table1 t1
left join Table2 t2
  on t1."Registration#" = t2."Registration#"
  and t2.Company = 'ABC'
order by t1."Registration#";

这是一本书

注意:有关使用coalesce替换匹配行的分机号的更完整示例,请参见ollies answer。我错过了您的需求说明的这一部分:请参阅ollies答案,以获取使用coalesce替换匹配行的分机号的更完整示例。我错过了你要求的那部分投票,因为你也看到了使用coalesce更改分机号码的要求,我忽略了那部分投票,因为你也看到了使用coalesce更改分机号码的要求,我忽略了那部分