我有一个表,其中包含来自用户和组织的消息。该表包含一个名为usertype
的字段,用于指示消息是由用户还是组织发送的。
我必须将此表与两个分别包含用户详细信息和组织详细信息的表联系起来。
如何使用2个表编写连接查询?
我认为我可以通过联合来实现这一点,但是只能使用联接吗?
表格 - 用户获取:用户名
表 - 组织获取:组织名称
表消息 - 条目userid,usertype。
必须通过检查数据类型获取用户名
答案 0 :(得分:1)
UNIONs和JOIN做了很多不同的事情。 UNION将记录追加到查询的末尾,JOIN将字段添加到记录的末尾。
如果您的UNION查询有效,那么我建议您坚持下去。如果您真的想通过JOIN执行此操作,那么您可以执行以下操作并相应地更改工作流程。
SELECT message_id, message_title, user.name, corp.name
FROM group_messages
LEFT JOIN users ON
users.user_id = group_messages.user_id
AND group_messages.usertype = "1"
LEFT JOIN corp ON
corp.user_id = group_messages.user_id
AND group_messages.usertype = "0"
;
这将做的是返回包含用户和字段的字段的记录。当usertype为1时,将填充用户字段,并且corp字段将为null。当usertype为0时,将填充corp字段,用户字段将为null。您需要编写应用程序逻辑来读取返回的usertype并确定要读取的字段集。
老实说,如果你做了类似的事情,你只需要做两次单独的查询就会好很多。
如果您不希望每种类型的数据位于单独的字段中,则不应使用JOIN。如果您希望在同一个字段中返回每种类型的数据,您需要一个已经拥有的UNION。
答案 1 :(得分:0)
使用Union的My Query是否可以使用join实现?
SELECT
message_id
,CONCAT_WS('',fu。user_first_name
,fu。user_last_name
) uname,user_type
,message_title
,message_content
,posted_on
从group_messages
fgm加入users
fu ON fgm。user_type
='1'AND fu。user_id
= fgm。user_id
在哪里group_id
= '1' UNION
选择message_id
,corporate_name
uname,user_type
,message_title
,message_content
,posted_on
FROMgroup_messages
fgm加入corporate
fc ON fgm。user_type
='0'和 fc。corporate_id
= fgm。user_id
在哪里group_id
= '1'