我有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],
答案 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()
更快,但它不那么可移植。两者还将选择您选择的顺序中的第一个非空值,因此您可以更改想要的第一个值。