Sql 从另一个表中获取子表的属性
我准备了一份 我有一个父表,如下所示Sql 从另一个表中获取子表的属性,sql,sql-server,sql-server-2012,hierarchy,Sql,Sql Server,Sql Server 2012,Hierarchy,我准备了一份 我有一个父表,如下所示 +----------+------------+ | material | Attachment | +----------+------------+ | 101 | 1 | | 102 | 2 | | 201 | 4 | | 202 | 4 | | 301 | 2 | +----------+-----------
+----------+------------+
| material | Attachment |
+----------+------------+
| 101 | 1 |
| 102 | 2 |
| 201 | 4 |
| 202 | 4 |
| 301 | 2 |
+----------+------------+
也可以使用以下关系表
+--------+-------+
| parent | child |
+--------+-------+
| 101 | 201 |
| 101 | 202 |
| 101 | 204 |
| 101 | 205 |
| 102 | 301 |
| 102 | 302 |
+--------+-------+
我正在尝试以下面的格式获取孩子的附件。
预期产出
+--------+-------+------------+
| parent | child | Attachment |
+--------+-------+------------+
| 101 | 201 | 4 |
| 101 | 202 | 4 |
| 101 | 204 | Child NA |
| 101 | 205 | Child NA |
| 102 | 301 | 2 |
| 102 | 302 | Child NA |
+--------+-------+------------+
我试过这个问题。但我得到的是父母而不是孩子的依恋
select c.parent,c.child,Attachment from parent p
join child c
on p.material=c.parent
在下面
+--------+-------+------------+
| parent | child | Attachment |
+--------+-------+------------+
| 101 | 201 | 1 |
| 101 | 202 | 1 |
| 101 | 204 | 1 |
| 101 | 205 | 1 |
| 102 | 301 | 2 |
| 102 | 302 | 2 |
+--------+-------+------------+
我认为这是一个
左连接
:
select r.parent, r.child, p.attachment
from relation r left join
parent p
on p.material = r.child;
这将生成NULL
,而不是“Child NA”
是一个数字小提琴。根据您的评论,您可以这样写:
select c.parent,
c.child,
p.attachment
from child c
left join parent p on p.material = c.child
and
c.parent IN (select material from parent);
谢谢@Gordon。这很有效。但是当
child
表中有额外的行时,说112401
。这个查询也会返回这个结果。但我只想要那些存在于parent
table@Avinash . . . 这回答了您在这里提出的问题。如果你有不同的问题,问一个新问题。提供样本数据、预期结果和清晰的解释。