我有三張桌子:
場地:
| f_id | f_start | f_end |
|---|---|---|
| 1 | 10 | 20 |
| 2 | 15 | 25 |
| 3 | 5 | 10 |
人 :
| p_id | p_name |
|---|---|
| 1 | 羅杰 |
| 2 | 約翰 |
| 3 | 艾麗西亞 |
| 4 | 帕特里克 |
| 5 | 鮑勃 |
| 6 | 卡洛斯 |
| 7 | 曼迪 |
影響 :
| ID | fk_field | fk_person |
|---|---|---|
| 1 | 2 | 1 |
| 2 | 1 | 2 |
| 3 | 3 | 3 |
使用此查詢:
SELECT p.p_name, f.f_start, f.f_end
FROM person p
INNER JOIN affect a ON a.fk_person = p.p_id
INNER JOIN field f ON f.f_id = a.fk_field
WHERE f.f_end < 21 AND f.f_start > 7;
我得到這個結果:
| p_name | f_start | f_end |
|---|---|---|
| 約翰 | 10 | 20 |
但我也想讓那些沒有受到影響的人,這意味著他們有空。它包括會有這樣的空值:
| p_name | f_start | f_end |
|---|---|---|
| 約翰 | 10 | 20 |
| 帕特里克 | ||
| 鮑勃 | ||
| 卡洛斯 | ||
| 曼迪 |
那可能嗎?謝謝
uj5u.com熱心網友回復:
您需要使用LEFT JOIN而不是,INNER JOIN還需要在其LEFT JOIN本身中指定條件。給定子句中的條件WHERE以獲得您的預期結果。即包括與欄位表匹配或在影響表中不可用的人:
SELECT p.p_name, f.f_start, f.f_end
FROM person p
LEFT JOIN affect a ON a.fk_person = p.p_id
LEFT JOIN field f ON f.f_id = a.fk_field AND f.f_end < 21 AND f.f_start > 7
WHERE f.f_id IS NOT NULL
OR a.id IS NULL
輸出:
| p_name | f_start | f_end |
|---|---|---|
| 約翰 | 10 | 20 |
| 帕特里克 | ||
| 鮑勃 | ||
| 卡洛斯 | ||
| 曼迪 |
看到這個小提琴
uj5u.com熱心網友回復:
使用左連接:
FROM person p
LEFT JOIN affect a ON a.fk_person = p.p_id
INNER JOIN field f ON f.f_id = a.fk_field
WHERE f.f_end < 21 AND f.f_start > 7; ```
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477662.html
上一篇:如何提高此子查詢的性能
