1

以下のクエリがあります(selectのすべてのフィールドを*のみに短縮しました)。

SELECT u.*, e1.*, e2.*
FROM employee_db e1
JOIN employee_db e2 ON e1.manager_id = e2.id
JOIN users u ON u.id = e1.id

さらに 2 つのテーブルが関係しています。

  • チーム (ユーザーがチームに割り当てられる「team_name」のフラット バージョンが必要)

  • team_user_associations (team_id、user_id)

    (ユーザーは team_user_associations を通じて多くのチームを持っています)。


私が必要としているのは、結果に追加された 1 つのフィールドです。これは、ユーザーが属するすべての「team_name」のカンマ区切りの文字列です。ここでアプローチがどうなるかを理解するのに苦労しています...サブクエリレコードセットの「team_name」フィールドがフィールドになるコンマ区切りの文字列にフラット化されるサブクエリの結果のようなものでしょうかメインクエリ?

助けてくれてありがとう!

4

2 に答える 2

0
SELECT  u.*, e.*, e2.*, GROUP_CONCAT(t.team_name)
FROM    employee_db e
JOIN    employee_db e2
ON      e2.id = e.manager_id
JOIN    users u
ON      u.id = e.id
JOIN    team_user te
ON      te.user_ud = u.id
JOIN    teams t
ON      t.id = te.team_id
GROUP BY
        u.id
于 2012-05-19T19:54:02.267 に答える
0

以下のような解決策を試すことができます。

SELECT u.*, e1.*, e2.*, 
       GROUP_CONCAT(t.team_name ORDER BY t.team_name) AS team_names
FROM employee_db e
JOIN employee_db e2 ON l.manager_id = l2.id
JOIN users u ON u.id = l.id
JOIN team_user_associations ta ON ta.user_id = u.id
JOIN teams t ON ta.team_id = t.id
GROUP BY user_id

試してみて、うまくいくかどうか教えてください。他のテーブルの構造と目的を知らなければ難しいです。とにかく、コツは、チーム/ユーザーの関連付けに参加して行を拡張し、GROUP BY で再び行を減らすことです。関連付けが集計されたので、GROUP_CONCAT を使用してチーム名の列を取得できます。

于 2012-05-19T19:56:28.833 に答える