0

我已经简化了一点来问这个问题。因此,请随心所欲地使用桌子。

我有两张桌子

父表列是

ParentId,Parent_FirstName,Parent_LastName

子表列是

ChildId,Child_FirstName,Child_LastName,ParentId,Parent_FirstName,Parent_LastName

父表有一条记录

1,Joe,Bloggs

Child Table 有 3 条记录

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

提前致谢

4

1 回答 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)如果子表上有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 |

添加DISTINCTSELECT消除重复的行。


免责声明:

这假设您不是在寻找递归查询。

于 2013-04-18T00:29:36.143 回答