我对此问题进行了简化。 因此,请随便使用这些表。

我有两张桌子

父表列是

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

提前致谢

===============>>#1 票数: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)如果子表上有一个父母标识,则使用该父母标识进行链接

这样就足够了; 它会为您提供所需的信息, 在第二种情况下,您需要使用它来链接子表和父表:

2)否则将子表中的parent_first和parent_lastname与子表中的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以消除重复的行。


免责声明:

假设您不寻找递归查询。

  ask by Gazza T translate from so

未解决问题?本站智能推荐: