我试图在MS中查询,但无法解决。我有个餐桌上的员工:
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,后者返回詹姆斯作为名字,苏作为妻子的名字。所以我的查询应该返回(,这是我的预期结果)
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。如何更改我的查询,使其检查所有名称并返回预期结果。
select * FROM employees
where first_name like '%James%'
and wife_name like '%Sue%'
and pincode=101011;任何关于这方面的建议都会很有帮助。我是新加入的,需要帮助写自己加入才能得到结果。
发布于 2021-07-08 08:23:13
…
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?
)发布于 2021-07-08 12:39:48
太长时间不能发表评论,但也不打算对你正在使用的内容进行抨击。请接受建设性的批评。
除了表格内容上非常糟糕的设计之外,在你深入到你正在做的任何工作之前,应该先纠正这个错误。一个更典型的设计可能是有一桌人。现在,为了获得这种关系,你可以做几种方法。一是在每个人的记录中,添加两个额外的is。FatherID,MotherID.这些ID将直接连接回子字符串和要匹配的硬字符串。用像史密斯或琼斯这样的姓。然后,看看“约翰·史密斯”可能存在的许多例子,是的,而且找到与之匹配的妻子名苏、玛丽或其他任何名字的可能性也较低。但即便如此,也会带来多种可能性。是的,您正在添加一个PIN,但是即使是一台计算机也可以生成一个1234的随机引脚。
通过拥有ID,就不会对与谁的关系有任何含糊之处。
如果数据被稍微修改为
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关系的底层基础也将有助于您在将来轻松查询。
发布于 2021-07-08 13:33:06
试试这个:
SELECT
T2.*
FROM Employee T1
JOIN Employee T2 ON T2.Name = T1.FatherName
AND T2.WifeName = T1.MotherNamehttps://stackoverflow.com/questions/68297844
复制相似问题