我试图从三个不同的表中获取数据,我试图通过使用RIGHT JOIN显示其他表中的所有行但是我似乎没有返回它们...
SELECT id, user_name, first_name, last_name FROM vtigercrm600.vtiger_users
RIGHT JOIN vtigercrm600.vtiger_users2group
on vtigercrm600.vtiger_users.id = vtigercrm600.vtiger_users2group.userid
RIGHT JOIN vtigercrm600.vtiger_groups
on vtigercrm600.vtiger_users2group.groupid = vtigercrm600.vtiger_groups.groupid
WHERE vtigercrm600.vtiger_users.id = '5'
group by vtiger_users.id;
我从这个
获得以下内容||ID||user_name||first_name||last_name||
|| 5||user1 ||john ||smith ||
但我期待来自其他表格的数据,例如
||ID||user_name||first_name||last_name||groupid||userid||groupname ||description ||
|| 5||user1 ||john ||smith || 14|| 5||Sales Dept||Sales Dept Group||
用户表
||id||user_name||first_name||last_name||
users2group table
||groupid||userid||
分组表
||groupid||groupname||description||
答案 0 :(得分:3)
使用right join
时,where
子句应仅包含 last 表中的条件。但是,我不建议使用right join
。大多数人发现left join
更容易理解 - 因为它会将所有行保留在第一个表中。
我认为您应该尝试使用left join
。 。 。表格顺序相同。要从其他表中获取列,您需要在select
中包含列。
我怀疑这是你想要的逻辑:
SELECT u.id, u.user_name, u.first_name, u.last_name, g.*
FROM vtigercrm600.vtiger_users u LEFT JOIN
vtigercrm600.vtiger_users2group ug
on u.id = ug.userid LEFT JOIN
vtigercrm600.vtiger_groups g
on ug.groupid = g.groupid
WHERE u.id = 5;
注意:
group by
。我没有看到任何汇总。id
是一个数字,则不要使用单引号。仅对字符串和日期常量使用单引号。LEFT JOIN
可能会被INNER JOIN
替换 - 但如果用户不在任何群组中,您将不会获得任何行。答案 1 :(得分:1)
您需要在SELECT语句中列出所有表中所需的所有列。像
SELECT vtigercrm600.vtiger_users.id, vtigercrm600.vtiger_users.user_name, vtigercrm600.vtiger_users.first_name, vtigercrm600.vtiger_users.last_name, vtigercrm600.vtiger_groups.groupname, vtigercrm600.vtiger_groups.description ...