我的MySQL JOIN查询只从一个表中获取数据

时间:2011-07-31 11:44:50

标签: mysql join left-join

SELECT `users`.*
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

那是我的疑问。我有usersusers_profilesalbumsusers_sites中的数据。目前我在四个单独的查询中获得了必要的数据,但我想用JOIN进行优化。

我的问题是返回的结果集只包含users表中的一行数据(id为4)。这是可以预料的,但我也想在结尾处编写其他表格JOIN

例如,users_profiles包含我已确认包含user_id的行设置为4.但是users_profiles中没有任何行添加到查询中,我看到的就是来自users

有什么想法吗?其他表也是如此 - 我已经确认应该被正确选择但我不确定我做错了什么。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

尝试:

SELECT `users`.*, `users_profiles`.*, `albums`.*, `users_sites`.*
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

您的代码只选择users表中的列。

可替换地,

SELECT *
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

请注意,不建议选择*,因为它未经过优化。只需选择您需要的列。

答案 1 :(得分:2)

SELECT `users`.*, `user_profiles`.*, `albums`.*, `user_sites`.*
FROM (`users`)
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4 

答案 2 :(得分:1)

您只需从用户表中选择列;

SELECT users.*

更改您的users语句以包含您要检索的列,以包含所有表格中的所有列(受查询影响);

SELECT

包含 users_profile和users 表格中的所有内容;

SELECT * FROM `users`
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id`
JOIN `albums` ON `albums`.`user_id` = `users`.`id`
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id`
WHERE `users`.`id` = 4