首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自联接以查找与行数据匹配的父详细信息-

自联接以查找与行数据匹配的父详细信息-
EN

Stack Overflow用户
提问于 2021-07-08 08:12:17
回答 3查看 129关注 0票数 0

我试图在MS中查询,但无法解决。我有个餐桌上的员工:

代码语言:javascript
复制
Id  Name     Surname  FatherName  MotherName  WifeName  Pincode  isChild
--  -------  -------  ----------  ----------  --------  -------  -------
1   John     Green    James       Sue         null      101011   1
2   Michael  Sloan    Barry       Lilly       null      101011   1
3   Sally    Green    Andrew      Molly       Jemi      101011   1
4   Barry    Sloan    Soul        Paul        Lilly     101011   0
5   James    Green    Ned         White       Sue       101011   0

我需要一个查询,该查询选择子女的父名和母名与姓名和妻子名匹配的行。对于示例表,我希望返回父名和母名匹配名称和妻子名列的行的结果。就像。id=1,约翰的父亲名詹姆斯和母亲名字苏匹配id 5,后者返回詹姆斯作为名字,苏作为妻子的名字。所以我的查询应该返回(,这是我的预期结果)

代码语言:javascript
复制
Id  Name     Surname  FatherName  MotherName  WifeName  Pincode  isChild
--  -------  -------  ----------  ----------  --------  -------  -------
5   James    Green    Ned         White       Sue       101011   0
4   Barry    Sloan    Soul        Paul        Lilly     101011   0

我尝试使用下面的查询,但它只检查James。如何更改我的查询,使其检查所有名称并返回预期结果。

代码语言:javascript
复制
select * FROM employees
where first_name like '%James%'
and wife_name like '%Sue%'
and pincode=101011;

任何关于这方面的建议都会很有帮助。我是新加入的,需要帮助写自己加入才能得到结果。

EN

回答 3

Stack Overflow用户

发布于 2021-07-08 08:23:13

代码语言:javascript
复制
select *
from thetable as p -- the parent/father
where exists -- with one child at least
(
    select * 
    from thetable as c 
    where c.fathername = p.name 
    and c.mothername = p.wifename
    -- lastname?
)
票数 0
EN

Stack Overflow用户

发布于 2021-07-08 12:39:48

太长时间不能发表评论,但也不打算对你正在使用的内容进行抨击。请接受建设性的批评。

除了表格内容上非常糟糕的设计之外,在你深入到你正在做的任何工作之前,应该先纠正这个错误。一个更典型的设计可能是有一桌人。现在,为了获得这种关系,你可以做几种方法。一是在每个人的记录中,添加两个额外的is。FatherID,MotherID.这些ID将直接连接回子字符串和要匹配的硬字符串。用像史密斯或琼斯这样的姓。然后,看看“约翰·史密斯”可能存在的许多例子,是的,而且找到与之匹配的妻子名苏、玛丽或其他任何名字的可能性也较低。但即便如此,也会带来多种可能性。是的,您正在添加一个PIN,但是即使是一台计算机也可以生成一个1234的随机引脚。

通过拥有ID,就不会对与谁的关系有任何含糊之处。

如果数据被稍微修改为

代码语言:javascript
复制
Id  Name     Surname        FatherID    MotherID    SpouseID  
--  -------  -------        ----------  ----------  --------  
1   John     Green          5           6           null      
2   Michael  Sloan          4           3           null      
3   Lilly    Sloan          null        null        4
4   Barry    Sloan          null        null        3
5   James    Green          9           10          6         
6   Sue      Green          7           8           5         
7   Bill     Jones          null        null        8       
8   Martha   Jones          null        null        7
9   Brian    Green          null        null        10
10  Beth     Smith-Green    null        null        9

所以,在这个修改的例子中,你可以马上看到ID#1约翰格林有父亲的父母(ID#5)是詹姆斯,母亲(ID#6)是苏。但即便如此,詹姆斯还是父亲(ID#9)布赖恩和母亲(ID#10)贝丝的孩子。这个场景显示给了祖父母级的能力,并且每个James和Sue也是孩子,但是他们各自的父母。苏的琼斯姓的父母。

迈克尔斯隆,#4巴里和#3莉莉的父母。

另外,我还添加了一个配偶ID,这样可以避免重复所有复制的人的名字。然后,您可以根据孩子的父ID进行查询,以找出与猜测这类有希望的名字。

因此,即使不解决一个相对简单的查询,修复数据库和is关系的底层基础也将有助于您在将来轻松查询。

票数 0
EN

Stack Overflow用户

发布于 2021-07-08 13:33:06

试试这个:

代码语言:javascript
复制
SELECT
        T2.*
FROM    Employee T1
JOIN    Employee T2 ON  T2.Name     =   T1.FatherName
                    AND T2.WifeName =   T1.MotherName
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68297844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档