我有一個問題,我無法解決。 我一直在尋找一些其他職位,但其中大部分要麼複雜,爲我理解/使用或不處理相同的問題。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