Mysql基于标志列将一个表与另外两个表连接起来

Mysql基于标志列将一个表与另外两个表连接起来,mysql,join,Mysql,Join,我有一个表,其中包含来自用户和组织的消息。该表包含一个名为usertype的字段,该字段指示消息是由用户还是由组织发送的 我必须将这个表与两个分别包含用户详细信息和组织详细信息的表连接起来 如何使用这2个表编写联接查询 我想我可以通过一个联合来实现这一点,但它可以只用联合来实现吗 表-用户获取:用户名 表-组织获取:组织名称 表消息-条目userid、usertype。 必须通过检查数据类型来获取用户名我的查询使用Union可以使用join实现吗 选择message\u id,CONCAT\u

我有一个表,其中包含来自用户和组织的消息。该表包含一个名为
usertype
的字段,该字段指示消息是由用户还是由组织发送的

我必须将这个表与两个分别包含用户详细信息和组织详细信息的表连接起来

如何使用这2个表编写联接查询

我想我可以通过一个联合来实现这一点,但它可以只用联合来实现吗

表-用户获取:用户名
表-组织获取:组织名称
表消息-条目userid、usertype。
必须通过检查数据类型来获取用户名

我的查询使用Union可以使用join实现吗

选择
message\u id
,CONCAT\u WS(“”,fu.
user\u first\u name
,fu.
user\u last\u name
) uname,
用户类型
消息标题
消息内容
发布
从…起
group\u消息
fgm加入
users
fu 在fgm上。
用户类型
='1'和 fu.
user\u id
=fgm.
user\u id
其中
组id
='1' 联合
挑选
message\u id
corporate\u name
uname,
用户类型
消息标题
消息内容
发布于
group\u消息
fgm加入
corporate
fgm上的fc。
用户类型
='0'和 fc.
corporate\u id
=fgm.
user\u id
其中
组id
='1'


联合和联合的作用截然不同。 联合将记录附加到查询的结尾,联合将字段添加到记录的结尾

如果您的联合查询有效,那么我建议您坚持使用它。如果您真的想使用联接来执行此操作,那么您可以执行以下操作并相应地更改您的工作流

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时,将填充用户字段,公司字段将为空。当usertype为0时,将填充corp字段,并且用户字段将为null。您需要编写应用程序逻辑来读取返回的usertype并确定要读取的字段集

老实说,如果你做了这样的事情,你最好只做两个独立的查询


如果不希望每个类型的数据位于单独的字段中,则不应使用联接。如果希望在同一字段中返回每种类型的数据,则需要已有的联合。

一个表中不应包含不相关的实体。用户表中的用户,组织表中的组织。如果您真的需要编写这个奇怪的查询,UNION将起作用。