0

你好,我有一张桌子:

队伍:如下

|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 个查询,因为团队成员会动态变化......

任何帮助请...

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

4

2 回答 2

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;
于 2012-10-11T11:58:25.157 回答
0

它可以通过 strored procedure or function ,

编写函数并获取成员的计数,基于计数构造循环将被执行用于 temp 存储结果。

PostgreSQL 动态查询构造中可以使用 EXECUTE

于 2012-10-11T12:22:12.700 回答