我需要一个有点复杂的SELECT的SQL查询。假设有以下表格:
Table 1: Table 2: name | email | callingcardid id | name | email -------|------------|-------------- ---|--------|---------------- first | e@mail.com | null 1 | second | second@mail.com second | | 1 third | | null
输出应为:
name | email -------|----------- first | e@mail.com second | second@mail.com third | -
查询应该类似于
SELECT table1.name, COALESCE(NULLIF(table1.email, ''),
CASE WHEN table1.callingcardid != NULL
THEN (SELECT table2.email WHERE id = table1.callingcardid) ELSE '-' END) "email"
语法显然是错误的,因为我无法让它工作。还有一些其他列与其他表的连接,但否则它的工作原理。 CASE
子句是问题制定者。
数据库是Microsoft SQL Server 2008(或2012)。
答案 0 :(得分:1)
尝试使用COALESCE
,类似这样的内容;
SELECT
t1.name
,COALESCE(t1.email, t2.email,'-') email
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.callingcardid = t2.id
答案 1 :(得分:0)
此查询考虑了第一个表中电子邮件可能是NULL
或空字符串的可能性。在这两种情况下,将使用来自第二个表的电子邮件。如果没有可用的电子邮件信息,将显示该电子邮件的单个短划线。
SELECT t1.name,
CASE WHEN COALESCE(t1.email, '') = ''
THEN COALESCE(t2.email, '-')
ELSE t1.email END AS email
FROM table1 t1
LEFT JOIN table2 t2
ON t1.callingcardid = t2.id
答案 2 :(得分:0)
SELECT Table1.name
, CASE WHEN ISNULL(Table1.email,'') = ''
THEN Table2.email
ELSE Table1.email
END Email
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.name = Table2.name