Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 同一表上的多个联接_Mysql_Join_Foreign Keys_Primary Key_Multiple Join Rows - Fatal编程技术网

Mysql 同一表上的多个联接

Mysql 同一表上的多个联接,mysql,join,foreign-keys,primary-key,multiple-join-rows,Mysql,Join,Foreign Keys,Primary Key,Multiple Join Rows,我的模式是 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) NO

我的模式是

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`)
) 
我想找到他们的超级管理员,经销商,管理员姓名的电话。问题是我不能在同一id上多次加入。我尝试过的查询

select phone,superadmin_id,reseller_id, admin_id, name from reseller_did join 
account on account.id=reseller_did.admin_id 
上面的查询通过加入admin_id来显示admin name,但是如何获取同一手机的superadmin name和经销商name

编辑:样本输入

科目表

id     name

3      SuperAdmin1
9      Reseller1
10     Admin1
经销商(你做过

id  phone        superadmin_id   reseller_id   admin_id

1   9090909090   3                 9             10
样本输出

phone        superadmin    reseller    admin

9090909090   SuperAdmin1  Reseller1   Admin1
试试这个;)

在这个问题上,这个sql应该感谢

希望这能奏效

select 
    rd.phone as Phone ,
    a.name as Superadmin,
    a1.name as Reseller,
    account.name as Admin
from
    reseller_did rd
        join
    account ON account.id = rd.admin_id
        join
    account a ON a.id = rd.superadmin_id
        join
    account a1 ON a1.id = rd.reseller_id

您可以创建
帐户
表的三个别名,并将它们与
分销商(u did
表)进行内部连接

SELECT 
R.id,
R.phone,
A1.name AS superadmin,
A2.name AS reseller,
A3.name AS admin
FROM reseller_did R
INNER JOIN account A1 ON R.superadmin_id = A1.id 
INNER JOIN account A2 ON R.reseller_id = A2.id
INNER JOIN account A3 ON R.admin_id = A3.id ;

替代方法:

如果不想采用内部联接,可以使用以下查询获得相同的结果

SELECT 
R.phone,
(SELECT name FROM account WHERE id = R.superadmin_id) AS SuperAdmin,
(SELECT name FROM account WHERE id = R.reseller_id) AS Reseller,
(SELECT name FROM account WHERE id = R.admin_id) AS Admin
FROM reseller_did R;


注意:您正在
INT
数据类型中存储电话号码。您不应该使用
INT
存储电话号码。相反,您应该使用
VARCHAR

请发布一些示例输入和基于此的预期输出。@1000111我的错误,更新了与post类似的问题
SELECT 
R.id,
R.phone,
A1.name AS superadmin,
A2.name AS reseller,
A3.name AS admin
FROM reseller_did R
INNER JOIN account A1 ON R.superadmin_id = A1.id 
INNER JOIN account A2 ON R.reseller_id = A2.id
INNER JOIN account A3 ON R.admin_id = A3.id ;
SELECT 
R.phone,
(SELECT name FROM account WHERE id = R.superadmin_id) AS SuperAdmin,
(SELECT name FROM account WHERE id = R.reseller_id) AS Reseller,
(SELECT name FROM account WHERE id = R.admin_id) AS Admin
FROM reseller_did R;