gpt4 book ai didi

mysql - 同一张表上的多个联接

转载 作者:行者123 更新时间:2023-11-29 11:29:13 27 4
gpt4 key购买 nike

我的架构是

CREATE TABLE IF NOT EXISTS `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(120) NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `reseller_did` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`phone` int(11) NOT NULL,
`superadmin_id` int(11) NOT NULL DEFAULT '0',
`reseller_id` int(11) NOT NULL DEFAULT '0',
`admin_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
FOREIGN KEY (`superadmin_id`) REFERENCES account(`id`),
FOREIGN KEY (`reseller_id`) REFERENCES account(`id`),
FOREIGN KEY (`admin_id`) REFERENCES account(`id`)
)

我想查找手机及其 super 管理员、经销商、管理员名称。问题是我无法使用同一个 id 多次加入。我尝试过的查询

select phone,superadmin_id,reseller_id, admin_id, name from reseller_did join 
account on account.id=reseller_did.admin_id

上面的查询通过加入 admin_id 显示管理员名称,但是如何获取同一部手机的 super 管理员名称和经销商名称?

编辑:示例输入

账户表

id     name

3 SuperAdmin1
9 Reseller1
10 Admin1

reseller_did

id  phone        superadmin_id   reseller_id   admin_id

1 9090909090 3 9 10

示例输出

phone        superadmin    reseller    admin

9090909090 SuperAdmin1 Reseller1 Admin1

最佳答案

试试这个;)

select r.phone, a.name as admin, re.name reseller, s.name as superadmin
from reseller_did r
join account a on a.id = r.admin_id
join account s on s.id = r.superadmin_id
join account re on re.id = r.reseller_id

SqlFiddle Result

或者

SELECT r.phone,
MAX(CASE WHEN a.id = r.admin_id THEN a.name END) as admin,
MAX(CASE WHEN a.id = r.reseller_id THEN a.name END) as reseller,
MAX(CASE WHEN a.id = r.superadmin_id THEN a.name END) as superadmin
FROM reseller_did r
INNER JOIN account a
ON a.id IN (r.admin_id, r.superadmin_id, r.reseller_id)
GROUP BY r.phone

这条sql应该感谢@sagi在这个问题中Get multiple values from another table by different relations .

SqlFiddle Result

关于mysql - 同一张表上的多个联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695870/

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