我有两个表想要加入,但遇到了问题。我相信一定有一种方法可以干净地完成此操作,但我的菜鸟 SQL 技能还不够。以下是这两个表的详细信息:
所以基本上我想要的是我需要从最喜欢的食物表(表1)中拉出所有的人,并使用名称匹配将他们与表2中的电子邮件/电话号码进行匹配,如果不匹配工作,然后查找他们的 ID,然后提取电子邮件/电话。
在 Excel 中,通过执行几个包含在“IFNA”中的 VLOOKUPS 来解决该问题,基本上首先在名称匹配上尝试一次 Vlookup,如果失败,则对 ID 执行 VLookup。在两者之间,我可以匹配几乎所有数据。这在 SQL 中是如何实现的呢?我的数据集对于 Excel 来说太大了。
我解决这个问题的伪代码尝试/思考过程(显然不是工作代码)如下:
select * from People LEFT JOIN Contacts ON People.Name == Contacts.Name, if Null, then LEFT JOIN Contacts ON People.ID == Contacts.ID
您可以从人员表离开连接到联系人表两次,每次可能与姓名或 ID 匹配一次:
SELECT
p.Name,
p.ID,
p.favorite_food,
COALESCE(c1.email, c2.email) AS email,
COALESCE(c1.phone, c2.phone) AS phone
FROM people p
LEFT JOIN contacts c1
ON c1.Name = p.Name
LEFT JOIN contact c2
ON c2.ID = p.ID;