【发布时间】:2021-11-16 07:41:38
【问题描述】:
我有以下疑问:
SELECT u.id, u.name, n.other_user, n.notification FROM notifications n
INNER JOIN users u ON
CASE
WHEN n.user = :me THEN u.id = n.other_user
WHEN n.other_user = :me THEN u.id = n.user
ELSE "CANCEL JOIN HERE"
END
对于上面的查询,我有这样的notification 表:
| id | user | other_user | notification |
|---|---|---|---|
| 1 | 5 | 2 | Text 1 |
| 2 | 3 | 3 | Text 2 |
| 3 | 2 | 16 | Text 3 |
| 4 | 0 | 0 | Text 4 |
| 5 | 0 | 0 | Text 5 |
现在假设我登录用户2。因此,我想用id1, 3, 4, 5 获取记录。这是因为记录1, 3 在user 和other_user 中都有用户2,记录4,5 是针对所有人的,因为它们没有分配给任何特定的用户ID(因为它们是0,0)。此外,当这些记录被选中时,它们不应加入users 表,因为没有 ID 为0 的用户。在这里,0 表示通知已发送给站点上的每个用户。它适合所有人。因此,我也想在使用0,0 选择这些记录时取消与users 表的连接。
现在,我当前的查询(没有ELSE 部分)只给我记录1,3 并忽略记录4,5。我相信这是因为这里使用了INNER JOIN。但我不能使用任何其他联接。我需要内部连接。如何在这里也选择记录4,5?
【问题讨论】:
-
跳过 case 表达式,改用正则 AND / OR。