gpt4 book ai didi

MySQL:使用条件连接改进查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:38 24 4
gpt4 key购买 nike

SELECT n.type, n.type_id, n.data,
( CASE WHEN (n.type='users') THEN users.u_name ELSE NULL END ) AS user_name,
( CASE WHEN (n.type='blogs') THEN blogs.b_name ELSE NULL END ) AS blog_name
FROM notifications AS n
LEFT JOIN users ON ( CASE
WHEN (n.type='users') AND n.type_id=users.id THEN 1
ELSE 0
END = 1 )
LEFT JOIN blogs ON ( CASE
WHEN (n.type='blogs') AND n.type_id=blogs.id THEN 1
ELSE 0
END = 1 )
WHERE n.receiver_id = 1
ORDER BY n.id DESC LIMIT 20

它有效,但使用:使用文件排序,使用连接缓冲区(平面,BNL 连接),使用连接缓冲区(增量,BNL 连接)。这看起来不太好。

此外,LEFT Join 应该是 INNER,但是对于 inner 它不会显示任何结果...(以及相同的临时、文件排序、缓冲区等)

我尝试了不同的语法(可能是错误的)但结果相同:

 ( CASE WHEN (n.type='blogs') THEN n.type_id=blogs.id ELSE NULL END )

我可以做两个查询,但我想一次做 :)

最佳答案

SELECT n.type, n.type_id, n.data,
users.u_name as user_name,
blogs.b_name AS blog_name
FROM notifications AS n
LEFT JOIN users ON n.type='users' AND n.type_id=users.id
LEFT JOIN blogs ON n.type='blogs' AND n.type_id=blogs.id
WHERE n.receiver_id = 1
ORDER BY n.id DESC
LIMIT 20

你不需要这些案例。 left join 是正确的方法,因为通知来自用户或博客,而不是两者。

关于MySQL:使用条件连接改进查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42085429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com