簡體   English   中英

Mysql Join一個表,基於標記列與其他兩個表

[英]Mysql Join A table with with two other tables based on a flag column

我有一個表,其中包含來自用戶和組織的消息。 該表包含一個名為usertype的字段,該字段指示消息是由用戶還是組織發送的。

我必須將此表與分別包含用戶詳細信息和組織詳細信息的兩個表連接起來。

我該如何用thes 2表編寫聯接查詢?

我想我可以通過工會來實現這一點,但是可以僅使用聯接來完成嗎?

表-USER提取:用戶名
表格-組織提取:組織名稱
表消息-條目userid和用戶類型。 必須通過檢查數據類型來獲取用戶名

UNION和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"
;

這將返回帶有用戶字段和corp字段的記錄。 當usertype為1時,將填充用戶字段,而corp字段將為null。 當usertype為0時,將填充corp字段,而user字段將為null。 您將需要編寫應用程序邏輯來讀取返回的用戶類型並確定要讀取的字段集。

不過,老實說,如果您執行類似的操作,那么最好只進行兩個單獨的查詢。

如果您不希望每種類型的數據都位於單獨的字段中,則不應使用JOIN。 如果希望將每種類型的數據返回到同一字段中,則希望已有一個UNION。

我的使用Union的查詢可以使用join來實現嗎?

SELECT message_id ,CONCAT_WS('', user_first_nameuser_last_name )uname, user_typemessage_titlemessage_contentposted_on FROM group_messages fgm加入users FU ON fgm。 user_type =' user_type fu。 user_id = fgm。 user_id WHERE group_id =' group_id
SELECT message_idcorporate_name uname, user_typemessage_titlemessage_contentposted_on FROM group_messages fgm加入corporate fc ON fgm。 user_type ='0'並且fc。 corporate_id = fgm。 user_id WHERE group_id ='1'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM