Sql Select语句用于从Oracle中的其他表中选择超越值
我有几个表是这样的: 表1 表2 查询的结果应该是 如果条件公司=ABCSql 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 不要忘记参数化您的查询
不要将您的条件作为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更改分机号码的要求,我忽略了那部分