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
        )