2017-11-12 14 views
0

SQLクエリで助けが必要です。二、MySQL/SQL。 2つの列で2つのselect文を結合する

SELECT 
    tbl_events.eventName as eventName1 
    FROM tbl_events 
    INNER JOIN tbl_users 
    ON tbl_events.eventAutorID = tbl_users.userID 
    WHERE tbl_users.userID = "6"; 

Output: 

eventName1: 
eventNametest1 
eventNametest2 
eventNametest3 
eventNametest9 

SELECT 
    tbl_events.eventName as eventName2 
    FROM tbl_users 
    INNER JOIN tbl_participants 
    ON tbl_users.userID = tbl_participants.participantUser 
    INNER JOIN tbl_events 
    ON tbl_participants.participantEvent = tbl_events.eventID 
    WHERE tbl_users.userID = "6"; 

Output: 

eventName2: 
eventNametest1 
eventNametest3 
eventNametest6 
eventNametest12 
eventNametest15 
eventNametest16 

まずクエリ特定のIDを持つユーザーが作成したすべてのイベント(名前)を選択することである(例えば、ID = 6。):私は2つの分離SELECTクエリを持っています特定のIDを持つユーザーが参加者として追加されたすべてのイベント(イベント名)を取得することです。 これらの文を1つにまとめることはできますが、結果は2つの異なる列にまとめられますか? 出力は次のようになります。

eventName1 | eventName2 

    eventNametest1 eventNametest1 
    eventNametest2 eventNametest3 
    eventNametest3 eventNametest6 
    eventNametest9 eventNametest12 
    NULL    eventNametest15 
    NULL    eventNametest16 
+1

あなたはイベントがあなたの例のように並ぶようにしたいですか?質問を編集し、サンプルデータと希望の結果を提供してください。 –

+0

私の質問が更新されました。 – Starkov

答えて

0

MySQLはFULL JOINを提供していません。また、誰かがイベントを許可して参加しない場合は、その必要性があります。

一つの方法は、UNION ALLと変数を使用しています:

SELECT MAX(authName) as authName, MAX(partName) as partName 
FROM ((SELECT e.eventName as authName, NULL as partName, (@rne := @rne + 1) as rn 
     FROM tbl_events e JOIN 
      tbl_users u 
      ON e.eventAutorID = u.userID CROSS JOIN 
      (SELECT @rna := 0) params 
     WHERE u.userID = 6 
     ORDER BY eventName 
    ) UNION ALL 
     (SELECT NULL, e.eventName, (@rnp := @rnp + 1) as rn 
     FROM tbl_participants p JOIN 
      tbl_events e 
      ON e.eventId = p.participantEvent CROSS JOIN 
      (SELECT @rnp := 0) params 
     WHERE p.participantUser = 6 
     ORDER BY e.eventName 
    ) 
    ) ap 
GROUP BY rn; 
+0

ありがとうございます。私はなぜ、あなたのコードが適切に動作しないのか分からない。私は常に1つの行しか得ません。私は質問を更新しました。これは私のデータベースです https://i.stack.imgur.com/oLkGg.jpg – Starkov

+0

*私は常に各列に1つの行を取得します。 @Gordon Linoff – Starkov

+0

@Starkov。 。 。 '@ rnp'の初期化の欠如は、その列に影響を与えていました。しかし、それは彼がイベントを許可した砦を働かせていたはずです(そして、それは両方で今働くべきです)。 –

0

あなただけの労働組合の参照を使用します。https://dev.mysql.com/doc/refman/5.7/en/union.html

+0

外部リソースへのリンクは貴重かもしれませんが、SOのあなたの投稿に直接その答えの本質を説明し、含めることが期待されます。そうしてください。 –

関連する問題