Py学习  »  DATABASE

MySQL取消加入案例不匹配

Relaxing Music • 2 年前 • 562 次点击  

我有以下疑问:

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 像这样的表格:

身份证件 使用者 其他用户 通知
1. 5. 2. 文本1
2. 3. 3. 文本2
3. 2. 16 文本3
4. 0 0 文本4
5. 0 0 文本5

现在让我们假设我是一个登录用户 2 .因此,我想用 id 1, 3, 4, 5 .这是因为 1, 3 拥有用户 2. 两者都有 user other_user 和记录 4,5 适用于所有人,因为他们没有分配给任何特定的用户id(实际上是这样的) 0,0 )。此外,选择这些记录时,不应将其加入 users 表,因为没有id为的用户 0 在这里 0 意味着通知被发送给了网站上的每个用户。这是给每个人的。因此,我也想取消加入 用户 在选择这些记录时使用 0,0 .

现在,我当前的问题(没有 ELSE 1,3 忽略记录 4,5 .我相信这是因为 INNER JOIN 这里用过。但我不能使用任何其他连接。我需要内在的联结。如何选择记录 4,5 这里也是吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130228
 
562 次点击  
文章 [ 1 ]  |  最新文章 2 年前
Barmar
Reply   •   1 楼
Barmar    2 年前

使用一个单独的查询来获取其他记录,并将它们与 UNION

SELECT *
FROM (
    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
    END
    
    UNION
    
    SELECT n.user, '', n.other_user, n.notification
    FROM notification n
    WHERE n.user = 0 AND n.other_user = 0
) AS x
ORDER BY x.id