MYSQL加入来自同一个表的多个列[关闭]

Posted

技术标签:

【中文标题】MYSQL加入来自同一个表的多个列[关闭]【英文标题】:MYSQL Join multiple column from same table [closed] 【发布时间】:2014-02-06 23:12:59 【问题描述】:

我正在尝试使用 Join 从 table2 中获取 skill1skill2skill3 的技能名称。

当我试图单独获得skill1 时,它工作正常。但是,当我尝试获取下一列的详细信息时,会出现 1066 Not unique table/alias 错误。


表 1(用户表)

======================================
ID  Name       skill   skill2   skill3
======================================
1   Ed           1       4       3    
--------------------------------------

表 2(技能详情)

=========================
ID  Skill Name
=========================
1   php
2   html
3   css
4   mysql
-------------------------

这是我期望得到的:

[name]    => 'Ed'
[skill1]  => 'php'
[skill2]  => 'mysql'
[skill3]  => 'css'

这是我的代码,我使用的是 laravel:

DB::table('table1')
   ->join('table2', function($join)
    
         $join->on('table1.skill1', '=', 'table2.id');
    )
    ->join('table2', function($join)
    
         $join->on('table1.skill2', '=', 'table2.id');
    )
    ->join('table2', function($join)
    
         $join->on('table1.skill3', '=', 'table2.id');
    )
    ->get();

【问题讨论】:

不是一个答案,但我会先重新组织我的表格,然后引入第三个表格,将用户 ID 链接到技能 ID。那么你不限于 3 个(或者你的用户表中的技能字段数量)。 @jeroen 多对多关系不适合胆小的人 想想你有 3 个连接,每个连接都可以通过 Skill.id 将 User.skill(n) 加入到技能表中,提示:user.skil(n) 上的每个连接都有一个表别名姓名。现在你可以尝试展示你所做的一切 如果要这样走,需要注意报错:You need aliases for the table names in the different joins. 【参考方案1】:

试试这个查询:

SELECT U.Name AS Name, S1.Skill Name AS Skill1, S2.Skill Name AS Skill2, S3.Skill Name AS Skill3
    FROM table1 U
    JOIN table2 S1 ON (S1.Id = U.skill1)
    JOIN table2 S2 ON (S2.Id = U.skill2)
    JOIN table2 S3 ON (S3.Id = U.skill3)

【讨论】:

不错...但是事实证明,使用三个以上的连接时性能非常糟糕。【参考方案2】:

与@erickmcarvalho 查询结果相同

SELECT Table1.usrname,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill1 = Table2.Id) As skill1,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill2 = Table2.Id) As skill2,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill3 = Table2.Id) As skill3
FROM Table1

仍然会导致 4 个查询,最好重组表

【讨论】:

谢谢。是的,你是对的,但是 JOIN 会稍微快一些 3个子查询没有问题。我认为重组表与正确索引子查询是一个相当愚蠢的主张。只要确保所有子查询都在索引上运行,应该没有问题。

以上是关于MYSQL加入来自同一个表的多个列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

来自单个控制器的多个模型[关闭]

mysql - 来自桥接表的多对多查询[关闭]

如何使用来自多个表的信息更新表[关闭]

我需要从表的多个列中获取 Null 值的总数 [关闭]

如何加入蜂巢[关闭]

何时在 mysql 中使用 Union [关闭]