Mysql SQL子查询获取比外部查询更多的行

Mysql SQL子查询获取比外部查询更多的行,mysql,sql,Mysql,Sql,我试图找出一种从不同的表中获取两个数据集的方法。下面是SQL的工作版本 SELECT l.id AS teamId, l.leagueId, t.name AS teamName, a.id FROM leagues AS l LEFT JOIN ( SELECT a.id, a.teamId FROM activities AS a WHERE a.status=(:a) AND a.leagueId=(:l) AND a.apply_standing

我试图找出一种从不同的表中获取两个数据集的方法。下面是SQL的工作版本

SELECT l.id AS teamId, l.leagueId, t.name AS teamName, a.id
FROM leagues AS l
LEFT JOIN (
    SELECT a.id, a.teamId
    FROM activities AS a
    WHERE a.status=(:a) AND a.leagueId=(:l) 
        AND a.apply_standings=(:p) AND a.activityCode = (:g) 
) on a.teamId = l.teamId
JOIN teams AS t ON t.id = l.teamId
WHERE l.status !=(:s) AND l.leagueId=(:l)
ORDER BY teamId
LIMIT 55


TABLES
Teams
+-----------+-----------+
|   id      |   name    |                                                           
+-----------+-----------+
1             Scorpions
2             Jazz  
...

League
+------------+-----------+
|   leagueId |  teamId   |                                                            
+------------+-----------+
1               2
1               1
2               1
3               4
...

Activities
+-----------+----------------+---------+
|   id      |   activityCode |  teamId |                                                    
+-----------+----------------+---------+
1               game            1
2               social          2
3               ..              1
4               ..              3
...
此查询的问题是,如果有多个活动,则查询将只返回一个结果。我试图将上述语句转换为所选变量的子查询,但遇到了SQLSTATE[21000]:基数冲突:1241操作数应包含1列错误

本质上,我试图得到类似的结果

array(
    "team_name",
          array(
              ..activity details
          ),
          array(
              ..activity details
          ),
          array(
              ..activity details
          ),
),
    "other Name",
          array(
              ..activity details
          ),
          array(
              ..activity details
          ),
          array(
              ..activity details
          ),
);

我知道这不是我将接收的格式,但这是我能想到的最好的格式。

因此,如果我理解正确,您希望:

  • 所有具有球队id的俱乐部成员参赛作品
  • 只有符合某些约束条件的条目(联盟ID、状态、排名、活动代码?)
  • 然后获取这些条目的所有活动(如果有)
  • 所有这些活动的结果是什么?(这个不太清楚)
  • 按teamId列出结果
另外,请原谅任何语法问题,我对MySQL不像对其他SQL引擎那样熟悉

SELECT 
    cm.id AS teamId, cm.leagueId, t.name AS teamName, a.id, 
    a.homeId, a.awayId, a.score_away, a.score_home
FROM `clubs-members` AS cm
JOIN teams AS t ON t.id = cm.teamId
LEFT JOIN activities AS a ON (a.teamId = cm.teamId AND a.status=(:a) 
     AND a.apply_standings=(:p) AND a.activityCode = (:g) )
LEFT JOIN `activities-results` AS r ON r.activityId = a.id AND UNIX_TIMESTAMP(r.approved) != 0
WHERE cm.status !=(:s) AND cm.leagueId=(:l)
ORDER BY teamId
LIMIT 55

如果这能让您到达您要去的地方,请告诉我。

首先,您的子查询没有连接到任何东西上。另外,为什么不直接从活动中选择并将其他表加入其中呢?最后,如果你能在SQLfiddle或其他东西中设置一些虚拟数据,这将极大地帮助我们。嗨,如果每个团队都有我可以参加的活动,你的建议将使一切变得相当容易。最终会是这样,但事实并非如此。因此,如果我要获取数据,我只会看到部分结果,而不是完整的团队列表——请参阅我对@adam的评论以获得更多澄清。给我几分钟,我会帮你分析一些东西。尽管如此,我仍然不明白你为什么不加入你的select。嗨,很抱歉,这绝对是一个错误。有一个ON语句。你的问题中仍然有一些令人困惑的错误(我从重新格式化中假设)。你能看一看吗?我想要1)俱乐部会员区中拥有相同联盟ID的球队名单。在新的sql up top中,leagues的sql表代表俱乐部成员。参数将是leagueId等于1或8,然后状态将为activie。我所追求的第二个数据集是联盟内球队的所有活动。我不会太担心其他信息,因为我可以很容易地看出,一旦我掌握了如何完成这两个数据集,Sql就不起作用了,它只需要有能力的团队,我想要有和的团队without@bushbrigade这是因为您的活动限制(比如a.status=(:a))。我把它移到了join上,我认为它应该可以工作(同样,我也不是100%确定MySQL中的语法是如何工作的)@bushbush很高兴我可以hep=D。我主要使用PL-SQL和MS-sqlserver。另外,如果你想让评论选择“@username”,它必须在评论的开头(就像上面我的一样)