我有一个表包含来自用户和组织的消息。该表包含称为usertype
的字段,该字段指示消息是由用户还是组织发送的。Mysql加入与两个其他表基于标志列
我必须加入这个表格,其中包含两个分别包含用户详细信息和组织详细信息的表格。
我该如何写2个表的连接查询?
我想我可以通过一个联合来实现这一点,但是可以只使用联接来完成吗?
表 - 用户获取:用户名
表 - 组织获取:组织名称
表信息 - 条目的用户ID,用户类型。 必须通过检查数据类型获取用户名
我有一个表包含来自用户和组织的消息。该表包含称为usertype
的字段,该字段指示消息是由用户还是组织发送的。Mysql加入与两个其他表基于标志列
我必须加入这个表格,其中包含两个分别包含用户详细信息和组织详细信息的表格。
我该如何写2个表的连接查询?
我想我可以通过一个联合来实现这一点,但是可以只使用联接来完成吗?
表 - 用户获取:用户名
表 - 组织获取:组织名称
表信息 - 条目的用户ID,用户类型。 必须通过检查数据类型获取用户名
工会和JOIN的做完全不同的事情。 UNIONs将记录追加到查询的末尾,JOINs将字段添加到记录的末尾。
如果您的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字段将为空。当usertype为0时,corp字段将被填充,并且用户字段将为空。您需要编写应用程序逻辑来读取返回的usertype并确定要读取的字段集合。老实说,如果你做了这样的事情,你只需要做两个单独的查询就好了很多。
如果您不希望每个类型的数据位于不同的字段中,则不应使用JOIN。如果您希望每个类型的数据在同一个字段中返回,您需要一个已拥有的UNION。
thnkz为您的建议我会更好地坚持我的联合查询 – Harish 2010-12-11 10:44:06
我的使用联盟的查询可以使用联接来实现吗?
SELECT
message_id
,CONCAT_WS(””,赋。user_first_name
,福。user_last_name
) UNAME,user_type
,message_title
,message_content
,posted_on
FROMgroup_messages
FGM JOINusers
福 ON FGM。user_type
='1'AND fu。user_id
= fgm。user_id
WHEREgroup_id
= '1' UNION
SELECTmessage_id
,corporate_name
UNAME,user_type
,message_title
,message_content
,posted_on
FROMgroup_messages
FGM JOINcorporate
FC的FGM。user_type
='0'AND fc。corporate_id
= fgm。user_id
WHEREgroup_id
= '1'
你不应该在一个表中有不相关的实体。用户表中的用户,组织表中的组织。如果你真的需要编写这个奇怪的查询,UNION将工作。 – 2010-12-11 09:53:34