加入一张桌子2次

时间:2015-08-21 18:54:07

标签: mysql sql database

在我的MySQL数据库中,我有表:groupprofileprofile_titles
这是表group的结构:

+----------+----------------+------------+
| group_id | title          | profile_id |
|        1 | Group Title 1  |          1 |
|        2 | Group Title 2  |          1 |
|        3 | Group Title 3  |          2 |
|        4 | Group Title 4  |          2 |
|      ... | Group Title 1  |        ... |
|       20 | Group Title 20 |         12 |
+----------+----------------+------------+  

profile_id链接到表profile中的FK:

+------------+------------------+
| profile_id | profile_title_id |
+------------+------------------+
|          1 |                1 |
|          2 |                2 |
|          3 |                3 |
|        ... |              ... |
|         11 |                1 |
|         12 |                5 |
+------------+------------------+  

profile_title_id链接到表profile_title中的FK:

+------------------+-----------------------+
| profile_title_id | title                 |
+------------------+-----------------------+
|                1 | Profile Title 1       |
|                2 | Profile Title 2       |
|                3 | Profile Title 3       |
|                4 | Profile Title 4       |
|              ... | ...                   |
|               10 | Profile Title 10      |
+------------------+-----------------------+   

JOIN遇到问题 以下是我想要得到的结果:

+----------+----------------+-------------------+-------------------+
| group_id | title          | profile_title_id  | profile_title     |
+----------+----------------+-------------------+-------------------+
|        1 | Group Title 1  |                 1 |   Profile Title 1 |
|        2 | Group Title 2  |                 1 |   Profile Title 1 |
|        3 | Group Title 3  |                 2 |   Profile Title 2 |
|        4 | Group Title 4  |                 2 |   Profile Title 2 |
|      ... |         ...    |               ... |               ... |
|       20 | Group Title 20 |                 5 |   Profile Title 5 |
+----------+----------------+-------------------+-------------------+  

但我只获得了我想要的第3列(group_idtitleprofile_title_id)。如何在结果中添加profile_title?我的查询现在:

SELECT
    `group`.`group_id`,
    `group`.`title`,
    `profile`.`profile_title_id`
FROM `group`
LEFT JOIN `profile` ON `group`.`profile_id` = `profile`.`profile_id`

我正在尝试此查询,但它会返回错误(#1066 - 不唯一的表/别名:'个人资料'):

SELECT
    `group`.`group_id`,
    `group`.`title`,
    `profile`.`profile_title_id`,
    `profile_title`.`title`
FROM `group`
LEFT JOIN `profile` ON `group`.`profile_id` = `profile`.`profile_id`
LEFT JOIN `profile` ON `group`.`profile_id` = `profile`.`profile_title_id`

非常喜欢任何建议,谢谢!

2 个答案:

答案 0 :(得分:2)

如果您在第二个左连接中加入profile_title,看起来您正在加入个人资料两次:

SELECT
    `group`.`group_id`,
    `group`.`title`,
    `profile`.`profile_title_id`,
    `profile_title`.`title`
FROM `group`
LEFT JOIN `profile` ON `group`.`profile_id` = `profile`.`profile_id`
LEFT JOIN `profile_title` ON `profile`.`profile_title_id` = `profile_title`.`profile_title_id`

至于你的问题中的错误 - 当多次加入同一个表时,你必须alias表格来区分它们。

请注意,您可以为您选择的任何表设置别名,基本上它允许在引用表时使用“快捷方式”,或者如果有多个同名的名称,则可以在查询中唯一标识表。

表别名可以写成:

select *
from 'group' as g

在上述查询中,您可以按g而不是group来引用列。

答案 1 :(得分:1)

请尝试类似:

SELECT
    `group`.`group_id`,
    `group`.`title`,
    `profile`.`profile_title_id`,
    `profile_title`.`title`
FROM `group`
LEFT JOIN `profile` ON `group`.`profile_id` = `profile`.`profile_id`
LEFT JOIN `profile_title` ON `profile`.`profile_title_id ` = `profile_title`.`profile_title_id`