MYSQL加入来自同一个表的多个列[关闭]
Posted
技术标签:
【中文标题】MYSQL加入来自同一个表的多个列[关闭]【英文标题】:MYSQL Join multiple column from same table [closed] 【发布时间】:2014-02-06 23:12:59 【问题描述】:我正在尝试使用 Join 从 table2 中获取 skill1
、skill2
和 skill3
的技能名称。
当我试图单独获得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加入来自同一个表的多个列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章