SQL从两个不同的表中仅选择一条记录

问题描述 投票:-1回答:3

我有两张桌子。假设它们被称为用户和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会跳过手机)。

sql union distinct
3个回答
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 + '%'

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 '%@%;

在同一列中包含电子邮件地址和电话号码没有标识类型的列,这似乎是一个非常糟糕的设计。

这会寻找'@'。显然还有其他方法可以区分这两者,但这似乎相对简单。


0
投票

为了获得不匹配的结果,您应该使用左连接

© www.soinside.com 2019 - 2024. All rights reserved.