【发布时间】:2022-01-15 08:53:39
【问题描述】:
为了简化问题,假设我有 2 个表: 用户
- id: int
门票
- id: int
- user_id: int
- 标记:bool
使用给定的示例数据:
用户
| id |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
门票
| id | user_id | marked |
|---|---|---|
| 1 | 1 | false |
| 2 | 1 | true |
| 3 | 1 | true |
| 4 | 2 | true |
| 5 | 2 | false |
| 6 | 2 | false |
| 7 | 3 | false |
| 8 | 5 | false |
| 9 | 5 | false |
用户 1 和 2 已标记工单。 用户 3 有 1 张未标记的工单。 用户 4 没有票。 用户 5 有 2 张未标记的票证。
我需要一个返回 tickets 的查询,其中 id 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 子句不太熟悉。
【问题讨论】:
-
您能否更具体地了解“但它没有按预期工作”?它做什么,什么不做什么?
-
为什么不想使用子查询?
-
您还想返回 id=7,8,9 因为它们没有标记。但门票 5 和 6 也没有标记。为什么你不想返回 5 和 6 ?
-
什么 rdbms?我的没有 bool 数据类型。
-
您还应该指定预期结果。