sql - 连接到 SQL Server 中的不同列
问题描述
我在 Table1 下面有一个主表:
Name ID Entry_Dt
PEREZ 2000 8/14/2014
PEREZ 2000 8/29/2017
Domingo 2098 8/29/2017
我在下面还有另一个表2:
kid_id Parent_id
2098 2000
我想要这样的结果:
Name Kid_id Parent_id Entry_dt
PEREZ 2000 8/14/2014
PEREZ 2000 8/29/2017
Domingo 2098 8/29/2017
我使用了两种不同的方法,例如下面的示例,但结果并不理想。
1:联合法
select *
FROM Table1 A INNER JOIN Table2 b
ON A.ID= B.Kid_id
union
select *
FROM Table1 A INNER JOIN Table2 b
ON A.ID= B.Parent_id
2:左连接方法:
select *
FROM Table1 A LEFT JOIN Table2 b
ON (A.ID= B.Kid_id or A.ID = B.Parent_id)
为什么我的方法不起作用?有什么改进的想法吗?
解决方案
您必须链接两个 distinct JOINs
,第一个是LEFT JOIN
父母的 a (如果存在),第二个是LEFT JOIN
孩子的 a too (如果存在)。
因此,您在字段列表中将kind_id
/公开parent_id
为两个不同的列
尝试这个:
SELECT main.name, main.id, kid.Kid_id, parent.parent_id, main.Entry_dt
FROM Table1 main
LEFT JOIN Table2 kid
ON main.id = kid.Kid_id
LEFT JOIN Table2 parent
ON main.id = parent.Parent_id
请参阅SQL 小提琴
推荐阅读
- android-studio - Android构建错误:无法加载'javax.xml.bind.jaxbeexception
- xml - XML到c#字符串数组
- sql - 乘以 2 直到特定数字变为并回答
- hive - 我在 csv 文件中的日期格式为 1989-09-26T09:00:00.000+05:30
- c# - System.TypeLoadException:无法使用令牌 01000115 解析类型
- python - 使用 glob 或 os.walk() 忽略特定目录中的文件
- ruby-on-rails-5 - 获得未经许可的参数警告
- performance - 如何使用硬件性能计数器捕获退役指令事件的准确值?
- powershell - PowerShell 批量转换图像
- excel - 从列表中提取唯一值时要替换为 NA 的空白