社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL取消加入案例不匹配

Relaxing Music • 3 年前 • 1333 次点击  

我有以下疑问:

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
 
1333 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Barmar
Reply   •   1 楼
Barmar    3 年前

使用一个单独的查询来获取其他记录,并将它们与 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