我有一个问题,我无法解决。 我一直在寻找一些其他职位,但其中大部分要么复杂,为我理解/使用或不处理相同的问题。SQL查询,多个外键的主键
首先表:
人
id | amt
=============
1 | 5
2 | 26
3 | 3
目标
id | idPerson | goals
===========================
1 | 1 | "AAA"
2 | 1 | "AAA"
4 | 1 | "DDD"
5 | 2 | "CCC"
6 | 2 | "BBB"
7 | 3 | "AAA"
我想要什么: 我需要所有的人的ID,而该人没有目标 “AAA”。 目前,一个人只能在表格目标中拥有1到3个目标。
我的选择:
SELECT Person.id, Person.amt
FROM Person
WHERE amt < 10
AND Person.id IN
(
SELECT Goal.idPerson
FROM Goal
WHERE Person.id = Goal.idPerson
AND Goal.goals != "AAA"
)
如果可能的话可能有人解释我为什么我的SQL不工作,什么我必须做不同的,所以它的工作原理?有了一个解释,我可以在将来避免同样的问题。 :)
谢谢。
编辑: 我没有想到这会产生问题,但是当我不仅过滤'AAA',而且'BBB',那么我会得到'AAA','BBB'的结果,甚至一些既。 如何哪里是现在:
AND Person.id NOT IN
(
SELECT Goal.idPerson
FROM Goal
WHERE Person.id = Goal.idPerson
AND Goal.goals = 'AAA'
AND Goal.goals = 'BBB'
)
对不起,我应该说我使用phpmyadmin,当我尝试使用SQL,然后我得到不存在的消息“无法识别的关键字”。 – SergSam
我确实更新了phpmyadmin,现在我可以使用NOT EXISTS,但是当我想要过滤不止一个目标时,我遇到了另一个问题,就像我在主帖中的编辑中所描述的那样。 – SergSam
@SergSam,使用'IN'运算符,然后像'AND目标IN('AAA','BBB','CCC')' – Rahul