gpt4 book ai didi

mysql - 如何在 MySQL 中使用 JOIN 编写正确的 If...Else 语句?

转载 作者:可可西里 更新时间:2023-11-01 07:27:32 25 4
gpt4 key购买 nike

我是 MySQL 的初学者,我只知道完全基本的语句,但是现在我该学习一些更困难但更有值(value)的东西了。

我实际上在 MySQL 中有 3 个表,这是表示:

用户:

   user_id | name    | country 
---------------------------
1 | Joseph | US
2 | Kennedy | US
3 | Dale | UK

管理员:

  admin_id | name    | country
----------------------------
1 | David | UK
2 | Ryan | US
3 | Paul | UK

注意事项:

id | n_id | note                    | comment   | country | type  | manager
----------------------------------------------------------------
1 | 3 | This is the 1st note | First | US | admin | 2
2 | 2 | This is the 2nd note | Second | US | user | 1
3 | 2 | This is the 3rd note | Third | UK | user | 2

现在我想执行像这样的 SQL(我不会在这里键入真正的命令,因为我并不真正熟悉所有的 SQL 表达式):

  IF notes.type = admin 
THEN
SELECT
notes.note,
notes.comment,
notes.country,
admins.name,
admins.country
FROM notes, admins
WHERE notes.n_id = admin.admin_id
ELSEIF notes.type = 'user'
SELECT
notes.note,
notes.comment,
notes.country,
users.name,
users.country
FROM notes, users
WHERE notes.n_id = users.user_id

我希望你明白我想在这里实现什么。我可以用更多的 SQL 语句轻松地做到这一点,但我想尝试一些不使用那么多资源的查询。


编辑 1:

我想获取所有注释并获取哪个用户组提交了它,而不是将用户名应用于它。我的意思是,如果管理员提交了注释,那么 SQL 应该从 Admin 表中选择 ID(根据类型值),但是如果用户提交了注释,它应该从 Users 表中获取名称。

结果应该类似于这样:

            result:
------
id | note | comment | country | name
--------------------------------------------------------
1 | This is the 1st note | First | US | Paul
2 | This is the 2nd note | Second | US | Kennedy
3 | This is the 3rd note | Third | UK | Kennedy

编辑2:

我其实忘了说,所有这些都应该列给经理。因此,应将“经理 ID”添加到注释中,并列出经理所在的所有注释,例如:2.

最佳答案

这是一种您可以在一个查询中执行的方法:

SELECT n.note, n.comment, n.country, 
coalesce(a.name, u.name) as name, coalesce(a.country, u.country) as country
FROM notes n left join
admins a
on n.n_id = a.admin_id and n.type = 'admin' left join
users u
on n.n_id = u.user_id and n.type = 'user';

这使用 left join 将两个表中的记录放在一起。然后它为 select 选择匹配的记录。

要选择特定的经理,请删除分号并添加:

where n.manager = 2;

关于mysql - 如何在 MySQL 中使用 JOIN 编写正确的 If...Else 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974514/

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