我有两个桌子。假设它们被称为用户和msg_systems。 用户包含用户标识,名字和姓氏。 Msg_systems包含用户ID和msg_address。 Msg_address可以是电子邮件地址或手机号码。 假设我们有三个用户,唐老鸭,米老鼠和冥王星。这些表如下所示: 用户:
Userid first_name last_name
1 Donald Duck
2 Mickey Mouse
3 Pluto
消息系统:
Userid msg_address
1 12345
1 donald.duck@duckburg.com
2 67890
我们可以看到,冥王星既没有电子邮件地址,也没有手机号码(毕竟,他只是一条狗)。米老鼠有手机号码,但没有电子邮件地址。
我现在想要达到的结果是:
Donald Duck donald.duck@duckborg.com
Mickey Mouse
Pluto
我希望列出每个用户,无论他们列出了电子邮件地址还是手机。但是,我只想要电子邮件地址,而不想要手机号码。
我尝试了一些UNION版本,但我只能设法让Donald两次,一次是使用他的电子邮件地址,一次是完全没有msgaddress的(其中,像'%@%'这样的msgaddress会跳过手机)。
答案 0 :(得分:0)
要获取也不匹配的结果,则应使用左连接
select a.first_name, a.last_name, b.msg_address
from Users a
LEFT JOIN Msg_systems b on a.user_d = b.user_id
AND b.msg_address LIKE U.first_name + '%'
答案 1 :(得分:0)
希望您正在使用MSSQL
将LEFT Join
与LIKE
一起使用
SELECT ISNULL(first_name,'') + ISNULL(last_name,'') + ISNULL(msg_address,'')
FROM Users U LEFT JOIN Msg_systems MS ON U.user_d = MS.user_id AND MS.msg_address LIKE U.first_name + '%'
答案 2 :(得分:0)
我建议:
select u.first_name, u.last_name, ms.msg_address
from users u left join
msg_systems ms
on ms.user_id = u.user_id and
ms.msg_address like '%@%;
在同一列中没有包含标识类型的列的电子邮件地址和电话号码似乎是一个非常糟糕的设计。
这会寻找'@'
。显然还有其他方法可以区分这两者,但这似乎相对简单。
答案 3 :(得分:0)
请在SQL服务器查询下面尝试以下方法:
SELECT [first_name] + ' ' + [last_name] + ' '
+ Isnull([msg_address], '')
FROM [dbo].[users]
LEFT JOIN (SELECT *
FROM [dbo].[msg_systems]
WHERE Isnumeric([msg_address]) <> 1) f1
ON [users].[userid] = f1.[userid]