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
那是我的疑问。我有users
,users_profiles
,albums
和users_sites
中的数据。目前我在四个单独的查询中获得了必要的数据,但我想用JOIN
进行优化。
我的问题是返回的结果集只包含users
表中的一行数据(id
为4)。这是可以预料的,但我也想在结尾处编写其他表格JOIN
。
例如,users_profiles
包含我已确认包含user_id
的行设置为4.但是users_profiles
中没有任何行添加到查询中,我看到的就是来自users
。
有什么想法吗?其他表也是如此 - 我已经确认应该被正确选择但我不确定我做错了什么。
感谢您的帮助!
答案 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