SQL 数据库没有得到我想要的好结果

SQL Databases not getting the good result that i want

对于这个问题,我需要写一个查询,returns所有和女球员一起踢球的男球员的名字。消除结果中的重复项。

select distinct name
FROM Persons, SportTogether S
WHERE Persons.gender = "male"
AND (Persons.id = S.personA_id AND sport ="soccer" 
AND S.personB_id IN(SELECT id FROM Persons WHERE gender ="female"))

OR 
(Persons.id = S.personB_id AND sport ="soccer" AND S.personA_id IN 
(SELECT id FROM Persons WHERE gender ="female"))

我现在得到三个名字。其中有 2 个是男人而且很好,但我也得到了第三个名字,这是一个女人的名字,这是一个假的。试了很多,都不知道哪里出错了。 数据库是:

(身份证、姓名、地址、年龄、眼睛颜色、性别)

SportTogether (id, sport, personA_id, personB_id)

如果我对SQL的理解是正确的,应该有“()”来使Persons.gender = “male”与后面的“OR”一起工作。 你能试试吗:

select distinct name
FROM Persons, SportTogether S
WHERE Persons.gender = "male"
AND 
((Persons.id = S.personA_id AND sport ="soccer" 
AND S.personB_id IN(SELECT id FROM Persons WHERE gender ="female"))
    OR 
(Persons.id = S.personB_id AND sport ="soccer" AND S.personA_id IN 
(SELECT id FROM Persons WHERE gender ="female")))

点赞table人两次

SELECT DISTINCT P1.name
FROM Persons P1 JOIN SportTogether S ON P1.id = S.personA_id 
JOIN Persons P2 ON p2.id = S.personB_id 
WHERE P1.gender = 'male' AND P2.gender = 'female' AND sport ='soccer'