在我的MySQL数据库中,我有表:group
,profile
和profile_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_id
,title
和profile_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`
非常喜欢任何建议,谢谢!
答案 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`