2010-12-11 51 views
0

ユーザーと組織の両方からのメッセージを含むテーブルがあります。テーブルには、メッセージがユーザーまたは組織によって送信されたかどうかを示すusertypeというフィールドが含まれています。Mysql Joinフラグ列に基づいて2つの他のテーブルを持つテーブル

私はこのテーブルを、それぞれユーザーの詳細と組織の詳細を含む2つのテーブルに結合する必要があります。

2つのテーブルを使用して結合クエリを作成するにはどうすればよいですか?

私はこれを組合で実現できると思いますが、結合のみを使用して行うことはできますか?

表 - USERフェッチ:ユーザー名
表 - 組織フェッチ:組織名を
表メッセージ - エントリのユーザーID、ユーザータイプを。 データ型を確認してユーザー名を取得する必要があります

+0

関連性のないエンティティを1つのテーブルに配置しないでください。ユーザーテーブル内のユーザー、組織テーブル内の組織この奇妙なクエリを本当に書く必要がある場合は、UNIONが機能します。 –

答えて

1

組合と非常に異なることを行うに参加します。 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" 
; 

これは、ユーザーフィールドのフィールドと企業のフィールドを返すレコードです。ユーザータイプが1の場合、ユーザーフィールドにはデータが入力され、企業フィールドはNULLになります。 usertypeが0の場合、企業フィールドにデータが入力され、ユーザーフィールドはnullになります。返されたユーザータイプを読み取って、読み取るフィールドのセットを決定するアプリケーションロジックを作成する必要があります。

あなたがそういったことをしたら、2つの別々のクエリを作成するほうがずっと優れています。

各タイプのデータを別々のフィールドに入れたくない場合は、JOINを使用しないでください。各タイプのデータが同じフィールドに返されるようにするには、既に持っているUNIONが必要です。

+0

あなたの助言のためにthnkz私はより良い私の組合のクエリ – Harish

0

My QueryはUnionを使用して結合を使用して実装できますか?

、CONCAT_WS message_idを選択します(」」、FUを。user_first_name、FU。user_last_name) のuname、user_typemessage_titlemessage_contentposted_on group_messages FROMがFGMはFGM ON users FU をJOIN。 user_type = '1' AND fu。 user_id = fgm。 group_id = '1'
message_id SELECT UNION、corporate_nameのuname、user_typemessage_titlemessage_contentposted_on FROM group_messages FGMがFGM ON corporate FCをJOIN user_iduser_type = '0' AND fc。 corporate_id = fgm。 user_id group_id = '1'

関連する問題