使用多个JOINS进行查询

时间:2017-10-03 05:42:51

标签: mysql sql

我遇到了一些SQL查询。

我有四张桌子。哪些是连接的:

用户 => user_account => acount_profile_entries => profile_entries

从左到右,他们是一对多。

user_account 的user_id字段为FK。 account_profile_field 包含 user_account_id profile_entry_id 。 Profile_entries有一个我需要为每个用户(帐户)显示的文本字段。

我需要编写一个查询,告诉我,每个用户的所有帐户及其个人资料条目。

如果这令人困惑,我很抱歉,我试着让它变得简单

这是我到目前为止所做的。我可以显示每个用户的所有帐户,这是我坚持的点。最后两个注释掉联接不能正常工作。我相信我有点接近,我只需要推动:)

SELECT
u.email AS Email,
u.id AS UserId,
ua.id AS UserAccountId,
ua.app_id AS Application
FROM users AS u
INNER JOIN user_accounts ua ON ua.user_id = u.id
-- INNER JOIN account_profile_entries ape ON ape.user_account_id = ua.id
-- INNER JOIN profile_entries as pe ON pe.id = ape.profile_entry_id
limit 10

1 个答案:

答案 0 :(得分:3)

使用LEFT JOIN

尝试此SQL查询

描述: - MySQL LEFT JOIN连接两个表并根据条件获取行,这两个表在两个表中匹配,并且在JOIN之前写入的表中也可以获得不匹配的行子句。

  

SYNTAX

SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;

enter image description here

SELECT u.*,
u.id AS UserId,
ua.id AS UserAccountId,
ua.app_id AS Application,pe.* FROM `users` u 
LEFT JOIN user_accounts ua ON ua.user_id = u.id 
LEFT JOIN account_profile_entries ape ON ape.user_account_id = ua.id
LEFT JOIN profile_entries as pe ON pe.id = ape.profile_entry_id LIMIT 10