你好我有一张桌子:
团队:,如下所示
|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个查询,因为团队成员会动态变化....
任何帮助请...
让我更清楚一点:我的最终结果应该只包含来自不同成员表的数据。希望我很清楚..
答案 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