Mysql 使用<&燃气轮机;在SQL中
问题是为那些没有和自己有同性子女的员工查找员工的姓氏 我的代码是:Mysql 使用<&燃气轮机;在SQL中,mysql,sql,database,Mysql,Sql,Database,问题是为那些没有和自己有同性子女的员工查找员工的姓氏 我的代码是: SELECT E.Lname FROM EMPLOYEE E, DEPENDENT D WHERE E.Ssn = D.Essn AND E.Sex <> D.Sex 是否有使用NOT IN子句的替代方法?您可以使用NOT EXISTS: SELECT E.Lname FROM EMPLOYEE E WHERE NOT EXISTS (SELECT 1 FROM DEPEN
SELECT E.Lname
FROM EMPLOYEE E, DEPENDENT D
WHERE E.Ssn = D.Essn
AND E.Sex <> D.Sex
是否有使用NOT IN子句的替代方法?您可以使用
NOT EXISTS
:
SELECT E.Lname
FROM EMPLOYEE E
WHERE NOT EXISTS (SELECT 1
FROM DEPENDENT D
WHERE E.Ssn = D.Essn
AND E.Sex = D.Sex
AND D.Relationship IN ('Son','Daughter')
)
这将只返回EMPLOYEE
表中的记录,因此不会返回多条记录
编辑:注意到关系选项包括“配偶”。试试这个
SELECT E.Lname
FROM EMPLOYEE E, DEPENDENT D
WHERE E.Ssn = D.Essn
AND D.Relationship IN ("Son", "Daughter")
AND E.Sex = D.Sex
GROUP BY E.Ssn
试试这个:
SELECT DISTINCT(EMPLOYEE.Lname) FROM DEPENDENT LEFT JOIN EMPLOYEE ON DEPENDENT.Essn=EMPLOYEE.Ssn WHERE (DEPENDENT.Sex <> EMPLOYEE.Sex) AND DEPENDENT.Relationship IN ('Daughter','Son');
SELECT DISTINCT(EMPLOYEE.Lname)FROM DEPENDENT LEFT JOIN EMPLOYEE ON DEPENDENT.Essn=EMPLOYEE.Ssn其中('DEPENDENT.Sex EMPLOYEE.Sex)和DEPENDENT.Relationship位于('child','Son');
与使用查询中的笛卡尔乘积不同,join使用left join不重复条目。
i、 e
选择E.Lname
来自员工E左连接依赖于D
关于E.Ssn=D.Essn
E.Sex和D.Sex在哪里
注意只要多个员工的姓氏相同,查询将给出重复的姓氏。如果需要唯一的姓氏,请尝试下面的查询
SELECT DISTINCT(E.Lname)
FROM EMPLOYEE E LEFT JOIN DEPENDENT D
ON E.Ssn = D.Essn
WHERE E.Sex <> D.Sex
SELECT DISTINCT(如Lname)
来自员工E左连接依赖于D
关于E.Ssn=D.Essn
E.Sex和D.Sex在哪里
查找与他们有相同性别孩子的员工列表,然后将他们从所有有孩子的员工列表中排除
SELECT DISTINCT A.Lname
FROM Employee A
INNER JOIN Dependent B
on A.Ssn = B.essn
Where B.Relationship in ('Son', 'Daughter')
AND A.Ssn not in (
SELECT AA.ssn
FROM Employee AA
INNER JOIN Dependent BB
on AA.Ssn = BB.essn
Where BB.Relationship in ('Son', 'Daughter')
And AA.Sex = BB.Sex
)
你能解释一下这是怎么回事吗?据我所知,您正在检查同性而非异性的受抚养人。您不能返回配偶。华莱士只有一个配偶,没有孩子。@nighternal在查询中添加和依赖关系(‘女儿’、‘儿子’)。根据我的理解,答案应该只返回Smith和Wong。此代码将返回English、Narayan、Borg、Wallace、Jabber、Zelaya。@夜间活动符合没有同性孩子的标准,为什么不包括他们?只要有两个或两个以上的员工具有相同的姓氏,查询必须为您提供两倍于您的相同姓氏条目。如果您想要唯一的姓氏,请使用distinct函数,这与OP的原始查询相同。由于
WHERE
子句中的条件,LEFT JOIN
被转换为internal JOIN
,尽管OP对JOIN使用了不推荐的语法,但逻辑是相同的。从注释来看,您可能想限制有孩子的人,而不是与自己性别相同的孩子?如果是这样的话,你应该重新回答你的问题,把问题说清楚。
SELECT DISTINCT(E.Lname)
FROM EMPLOYEE E LEFT JOIN DEPENDENT D
ON E.Ssn = D.Essn
WHERE E.Sex <> D.Sex
SELECT DISTINCT A.Lname
FROM Employee A
INNER JOIN Dependent B
on A.Ssn = B.essn
Where B.Relationship in ('Son', 'Daughter')
AND A.Ssn not in (
SELECT AA.ssn
FROM Employee AA
INNER JOIN Dependent BB
on AA.Ssn = BB.essn
Where BB.Relationship in ('Son', 'Daughter')
And AA.Sex = BB.Sex
)