我已经简化了一下这个问题。因此,请随意使用表格。
我有两张桌子
父表列是
ParentId,Parent_FirstName,Parent_LastName
子表列
ChildId,Child_FirstName,Child_LastName,ParentId,Parent_FirstName,Parent_LastName
父表有一条记录
1,Joe,Bloggs
子表有三条记录
1,Bob,Lawrence,1,,
2,Sam,Hunt,NULL,Joe,Bloggs
3,Sam,Hunt,1,,
我希望能够通过使用查询来获得以下内容
Joe Bloggs Bob Lawrence
Joe Bloggs Sam Hunt
但是..我希望能够通过以下
链接父表和子表1)If there is a parentid on the child table then link using the parentid
2)Else compare the parent_first and parent_lastname in the child table with that of the child tables
提前致谢
答案 0 :(得分:0)
像这样:
SELECT
p.Parent_FirstName,
p.Parent_LastName,
c.Child_FirstName,
c.Child_LastName
FROM parent AS p
INNER JOIN child AS c ON p.ParentId = c.ParentId;
请在此处查看:
这会给你:
| PARENT_FIRSTNAME | PARENT_LASTNAME | CHILD_FIRSTNAME | CHILD_LASTNAME |
-------------------------------------------------------------------------
| Joe | Bloggs | Bob | Lawrence |
| Joe | Bloggs | Sam | Hunt |
请注意:此查询将JOIN
两个表使用简单JOIN
使用第一个条件链接两个表:
1)如果子表上有parentid,则使用 parentId的
这就足够了;它将为您提供所需的内容, 但 ,以表示您要将子表与父表连接起来的第二个条件:
2)否则比较子表中的parent_first和parent_lastname 与子表的
您可以使用OR
添加以下条件:
c.ParentId IS NULL
AND c.Parent_FirstName = p.Parent_FirstName
AND c.Parent_LastName = p.Parent_LastName
这样的事情:
SELECT
p.Parent_FirstName,
p.Parent_LastName,
c.Child_FirstName,
c.Child_LastName
FROM parent AS p
INNER JOIN child AS c ON p.ParentId = c.ParentId
OR (c.ParentId IS NULL
AND c.Parent_FirstName = p.Parent_FirstName
AND c.Parent_LastName = p.Parent_LastName)
这会给你相同的结果,但是有重复的行:
像这样:
| PARENT_FIRSTNAME | PARENT_LASTNAME | CHILD_FIRSTNAME | CHILD_LASTNAME |
-------------------------------------------------------------------------
| Joe | Bloggs | Bob | Lawrence |
| Joe | Bloggs | Sam | Hunt |
| Joe | Bloggs | Sam | Hunt |
将DISTINCT
添加到SELECT
以消除重复的行。
<强>声明:强>
这假设您没有寻找递归查询。