我有两张桌子。假设它们被称为用户和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 [email protected]
2 67890
我们可以看到,冥王星既没有电子邮件地址,也没有手机号码(毕竟,他只是一条狗)。米老鼠有手机号码,但没有电子邮件地址。
我现在想达到的结果是:
Donald Duck [email protected]
Mickey Mouse
Pluto
我希望列出每个用户,无论他们列出了电子邮件地址还是手机。但是,我只想要电子邮件地址,而不想要手机号码。
我尝试过一些UNION版本,但我只能设法获得Donald两次,一次是使用他的电子邮件地址,一次是完全没有msgaddress的(其中,像'%@%'这样的msgaddress会跳过手机)。
希望您正在使用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 + '%'
我建议:
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 '%@%;
在同一列中包含电子邮件地址和电话号码没有标识类型的列,这似乎是一个非常糟糕的设计。
这会寻找'@'
。显然还有其他方法可以区分这两者,但这似乎相对简单。
为了获得不匹配的结果,您应该使用左连接