為了簡化問題,假設我有 2 個表: 用戶
- 編號:整數
票
- 編號:整數
- 用戶 ID:整數
- 標記:布爾
使用給定的示例資料:
用戶
| ID |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
票
| ID | 用戶身份 | 標記 |
|---|---|---|
| 1 | 1 | 錯誤的 |
| 2 | 1 | 真的 |
| 3 | 1 | 真的 |
| 4 | 2 | 真的 |
| 5 | 2 | 錯誤的 |
| 6 | 2 | 錯誤的 |
| 7 | 3 | 錯誤的 |
| 8 | 5 | 錯誤的 |
| 9 | 5 | 錯誤的 |
用戶 1 和 2 已標記票證。用戶 3 有 1 張未標記的票證。用戶 4 沒有票。用戶 5 有 2 張未標記的票證。
我需要一個查詢,回傳機票與編號7,8和9 -沒有標明票誰的用戶的門票。
我撰寫了以下查詢:
SELECT * FROM ticket t
INNER JOIN user u ON t.user_id=u.id
INNER JOIN ticket tt ON u.id = tt.user_id
WHERE tt.marked = false;
但它沒有按預期作業。我不想使用子查詢來排除具有標記票證的用戶。這可以通過 JOIN 完全完成嗎?所以碰巧我對 JOIN 子句不太熟悉。
uj5u.com熱心網友回復:
這假設marked是一個int. 您可能需要調整查詢以轉換bool資料型別。
with a as (
select t.user_id
, max(t.marked) as marked
from ticket t
group by t.user_id
)
select t.*
from ticket t
inner join a on a.user_id = t.user_id
where a.marked = 0
我故意省略,user因為它沒有增加任何價值。
uj5u.com熱心網友回復:
我不愿在沒有更多資訊的情況下回答,但子查詢可能會有所幫助。設定并發布排斥讓我們嘗試一下。
如果您不熟悉,這里有一個關于子查詢的簡短視頻。 https://www.youtube.com/watch?v=GpC0XyiJPEo&t=417s
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/384754.html
