對不起,標題。我現在不能提供任何有意義的東西,但如果您提出任何建議,我會更新它。令人難以置信的SQL難題
好的,這個問題一直困擾着我好幾天了,並且讓我發瘋。
我有一個數據庫,保持教育相關的過濾器。
table: FILTERS
filterid filtertype value
1 school MIT
1 school UT
1 school Lund
1 major econ
1 major civil
1 graduate 1
2 school Harvard
所以在這裏我有兩個過濾器定義,1和2的教育記錄通過過濾器1如果學校(MIT,UT或隆德)之一,主要是(經濟或民間)之一,是一個研究生課程。 通過過濾器2,一個教育記錄需要哈佛剛剛作爲學校。
我有另一張表,爲用戶保存教育記錄。用戶可以有幾個教育記錄(例如,一個是她的本科學業,一個研究生)
table: EDUCATION
educid uid school major graduate
1 1 MIT econ 1
2 1 Lund cs 0
所以人1有兩個教育記錄。 在這裏,教育記錄1通過過濾器1,因爲學校(MIT)屬於{MIT,UT,Lund),主要(econ)屬於{econ,civil}組並且是一個研究生課程。然而,教育記錄1沒有通過過濾器2,因爲學校是MIT,而不是哈佛。
教育記錄2沒有通過過濾器1,因爲主要(cs)不在{econ,civil},並且它不通過過濾器2,因爲學校是隆德而不是哈佛。
1人未通過過濾器1,如果沒有她的教育記錄經過過濾器1 因此,1個人經過過濾器1(因爲她的第一個教育記錄通過過濾器1),但不通過過濾器2,因爲沒有的hiher的教育記錄通過過濾器2.
我的目標是選擇人1不通過的過濾器filterid。
這就是我來這麼遠:
SELECT filterid FROM filters
LEFT JOIN education ON education.uid=1 AND (
(filtertype='school' AND filters.value=education.school) OR
(filtertype='major' AND filters.value=education.major) OR
(filtertype='graduate' AND filters.value=education.graduate)
)
GROUP BY filterid
HAVING (SUM(educid IS NULL)>0)
這顯然是行不通的,因爲根據這個查詢人1不低通濾波器1,如果她的教育記錄一個不帶通濾波器1。 (雖然它應該是如果她的記錄沒有通過過濾器1)。
我真的很感激任何解決方案,因爲它真的讓我難以置信。
你的要求是不是100%清楚。第一個人是否應該通過過濾器1(因爲她至少有一所*所需的學校,至少有一個專業和一個畢業生)?還是應該不通過,因爲她沒有*所有*所需的學校在她的教育?請添加更多示例。 –
人1通過過濾器1.正如我解釋:如果學校是一個(MIT,UT,隆德),並且主要是(經濟,民間)之一,並且是一個研究生課程,教育記錄通過過濾器1。爲了通過過濾器2,教育記錄需要哈佛作爲學校。 因此,教育記錄與教育= 1屬於人1通過過濾器1.因此,人1通過過濾器1. – user3163577
對不起,但我無法檢測到您的文章中的任何信息是否人1通過過濾器1。至少有一個例子。 –