【问题标题】:MySQL/SQL. Combine two select statement in two columnsMySQL/SQL。在两列中合并两个 select 语句
【发布时间】:2017-11-12 13:16:43
【问题描述】:

我需要有关 SQL 查询的帮助。我有两个单独的 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)的用户创建的所有事件(名称),第二个是获取具有特定 id 的用户被添加为参与者的所有事件(事件名称)。 如何将这些语句组合成一个但结果在两个不同的列中? 输出应如下所示:

   eventName1 | eventName2

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

【问题讨论】:

  • 您希望事件按照您的示例排列吗?编辑您的问题并提供示例数据以及所需的结果。
  • 我更新了我的问题。

标签: mysql sql


【解决方案1】:

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;

【讨论】:

  • 感谢您的回复。我不知道为什么,但是您的代码无法正常工作。我总是只得到一排。我更新了我的问题,这是我的数据库:i.stack.imgur.com/oLkGg.jpg
  • *我总是在每一列中只得到一行。 @戈登林诺夫
  • @Starkov 。 . . @rnp 缺少初始化会影响该列。但它应该适用于他授权的事件(现在应该适用于两者)。
【解决方案2】:

【讨论】:

  • 虽然指向外部资源的链接可能很有价值,但您应该直接在关于 SO 的帖子中解释并包含答案的本质。请这样做。
猜你喜欢
  • 1970-01-01
  • 2010-11-24
  • 2015-03-07
  • 2014-10-30
  • 1970-01-01
  • 2011-03-13
  • 2013-05-31
  • 2014-03-27
  • 2011-10-11
相关资源
最近更新 更多