是否可以在mysql查询中实现循环

时间:2012-10-11 11:51:59

标签: mysql

你好我有一张桌子:

团队:,如下所示

|Team ID  | Member ID|
| 1       |  10       |
| 2       |  230      |
| 1       |  11       |
| 4       |  56       |
| 1       |  15       |
| 2       |  236      |
| 1       |  18       |
| 3       |  43       |
| 1       |  17       |

我这样做是为了找到团队成员:

从team_ID = 1的团队中选择成员;它给了我10,11,15,18,17

我为每个成员提供了一个不同的表。所以我尝试过这样的方法从不同的表中获取数据并且工作正常:

SELECT * FROM 10
UNION ALL 
SELECT * FROM 11
UNION ALL 
SELECT * FROM 15
UNION ALL 
SELECT * FROM 18
UNION ALL 
SELECT * FROM 17

是否可以将 2个查询变为1个查询,因为团队成员会动态变化....

任何帮助请...

让我更清楚一点:我的最终结果应该只包含来自不同成员表的数据。希望我很清楚..

2 个答案:

答案 0 :(得分:2)

首先,我 强烈建议 您考虑重新设计表格结构,否则您将难以查询此数据。

你可以这样做。当然,这只有在您知道要查询的表成员表时才有效:

select *
from teams t
left join
(
  SELECT *, 10 Member 
  FROM 10
  UNION ALL 
  SELECT * , 11 Member 
  FROM 11
  UNION ALL 
  SELECT * , 15 Member 
  FROM 15
  UNION ALL 
  SELECT * , 18 Member 
  FROM 18
  UNION ALL 
  SELECT * , 17 Member 
  FROM 17
) m
  on t.memberid = m.member

如果要动态执行此操作,则可以使用与此类似的预准备语句:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'select *, ',
      MemberID,
      ' AS Member from ', MemberID, '
       '
    )
  separator ' union all ') 
  INTO @sql
FROM teams
WHERE TeamID = 1;

SET @sql = CONCAT('select *
                   from teams t 
                   left join
                   (', @sql, ' ) m
                     on t.memberid = m.member');

-- select @sql

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

答案 1 :(得分:0)

可以通过 strored procedure or function

来完成

写入函数并获取MEMBER的计数,根据count构造,循环将被执行 使用 temp 存储结果。

PostgreSQL 动态查询构造中的

可以使用 EXECUTE

执行