如果在一个表中为null,则从“其他”中选择

时间:2019-02-04 20:18:11

标签: sql sql-server

我有2个表查询和Application表,我想基于这两个表中的数据构建一个包含用户信息的视图。

示例

我有桌子查询

名字,姓氏,地址,电子邮件

我有表格Application

名字,姓氏,地址,电子邮件

我正在使用电子邮件字段查询表,这就是我想要的

从InquiryTBL中选择名字,其中电子邮件= @Email 如果为空,则从ApplictionTBL中选择名字,其中email = @email

这是我一直在尝试的

 SELECT 
      CASE
      WHEN a.Email = null
  THEN (SELECT FirstName from dbo.Inquiry_Tbl where email = @Email)
  ELSE a.FirstName
  END As [FirstName],  

2 个答案:

答案 0 :(得分:3)

如果两个表中都包含电子邮件,则可以在该字段上加入,然后使用COALESCE提取非空数据:

SELECT 
    Email = COALESCE( i.Email, a.Email)
    , FirstName = COALESCE(i.FirstName, a.FirstName)
    , LastName = COALESCE(i.LastName, a.LastNamej)
FROM InquiryTBL i
    LEFT JOIN ApplicationTBL a
        ON i.Email = a.Email

答案 1 :(得分:0)

如果电子邮件在两个表中或仅在一个表中,请在子选择的toEmptyResource上使用FULL OUTER JOIN。然后,您可以通过所需的电子邮件地址过滤子选择。

email

https://dbfiddle.uk/?rdbms=sqlserver_2012&fiddle=62d0f0a1026150de6b4fd9be3d058dbb

注意:要选择第一个非空值,可以使用DECLARE @email varchar(20) = 'ted@excellent.com' ; SELECT s1.FirsTName, s1.LastName, s1.Email FROM ( SELECT COALESCE(i.FirstName, a.FirstName) AS FirstName , COALESCE(i.LastName, a.LastName) AS LastName , COALESCE(i.email, a.email) AS email FROM InquiryTBL i FULL OUTER JOIN ApplicationTBL a ON i.email = a.email ) s1 WHERE s1.Email = @email ; coalesce()isnull()符合ANSI,可以使用两个以上的参数,并且可以在大多数数据库中使用。 coalesce()主要是Microsoft T-SQL函数,仅接受2个参数。在某些情况下,它可能比isnull()更快,但它不那么可移植。两者还将选择您选择的顺序中的第一个非空值,因此您可以更改想要的第一个值。