Mysql 来自同一个表的两个嵌套查询?
所以我有三张桌子 用户表Mysql 来自同一个表的两个嵌套查询?,mysql,sql,join,pivot,Mysql,Sql,Join,Pivot,所以我有三张桌子 用户表 UserId User 语言表 LanguageId Language Fluency UserLanguageId UserId LanguageId 用户语言表 LanguageId Language Fluency UserLanguageId UserId LanguageId 基本上我需要的是一个查询,其中PriLang是Fluence='Primary',SecLang是Fluence='Secondary',看起来像这样 +-----------
UserId User
语言表
LanguageId Language Fluency
UserLanguageId UserId LanguageId
用户语言表
LanguageId Language Fluency
UserLanguageId UserId LanguageId
基本上我需要的是一个查询,其中PriLang是Fluence='Primary',SecLang是Fluence='Secondary',看起来像这样
+------------+-----------------+-----------+
| User | PriLang | SecLang |
+------------+-----------------+-----------+
| Jimbo | English | Spanish |
+------------+-----------------+-----------+
| Norm | French | Spanish |
+------------+-----------------+-----------+
| Kathy | Japanese | Italian |
+------------+-----------------+-----------+
一个选项使用条件聚合:
select
u.user,
max(case when l.fluency = 'Primary' then l.language end) as pri_lang,
max(case when l.fluency = 'Secondary' then l.language end) as sec_lang
from users u
left join user_languages ul on ul.user_id = u.user_id
left join languages l on l.language_id = ul.language_id
group by u.user_id, u.user
根据您的设置,可能会出现类似的情况;这应该可以让您通过以下方式接近:
在我看来,最直接的方法涉及到两个到user_languages表的连接,以及每个连接到langauges表的连接
select usr.User, lg1.Language PriLang, lg2.Language SecLang
from users usr
left join user_languages ul1
on ul1.userId = usr.userId
and ul1.Fluency='Primary'
left join user_languages ul2
on ul2.userId = usr.userId
and ul2.Fluency='Secondary'
left join languages lg1
on lg1.languageId = ul1.languageId
left join languages lg2
on lg2.languageId = ul2.languageId
这将不会返回正确的结果。您必须将在线查询与用户关联起来,如
所示,其中Language\u Fluency='Primary'和userID=u.userID
谢谢;为了便于我理解相关子查询,我们是否必须链接WHERE
子句中的其他两个表,或者只链接一个表?@tlk27:Infact只需删除整个join子句,并在内联查询中引用user_id和其他筛选器即可。@tlk27:只需更新您,我建议对问题进行一些修改,1。语言_表只能在内联查询2中获取一次。当我们将内联查询作为列时,我们不需要左连接,而只需要简单的连接就足够了,因为如果连接条件匹配,它将返回结果或null。@Sujitmohanty30感谢您的知识和建议。我感谢您花时间提供改进此解决方案所需的信息和见解。谢谢,工作完全符合预期。我不知道你在ul2下也能像在那里一样流利。很高兴我能帮上忙!