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 に答える