1

mysql dbテーブルには、次のようなドメインテーブルとの1対多の関係を持つプロジェクトがあります。

プロジェクト

----------------
proId | domainId
----------------
  1        1
  1        2
  2        1
  3        3

ドメイン

---------------------
domainId | domainName
---------------------
    1        Web
    2        Mobile
    3        iPhone

問い合わせます

SELECT p.*, d.* FROM projects p LEFT JOIN domain d ON p.domainId = d.domainId

結果

結果

-----------------------------
proId | domainId | domainName
-----------------------------
  1       1          Web
  1       2          Mobile
  2       1          Web
  3       3          iPhone

しかし、次のような連結を使用して、すべてのドメインを単一の値として表示することは可能ですか?

-----------------------------
proId | domainId | domainName
-----------------------------
  1       1, 2    Web, Mobile
  2       1       Web
  3       3       iPhone
4

3 に答える 3

1

おそらくあなたは関数を探していGROUP_CONCATます。

SELECT  a.proID,
        GROUP_CONCAT(b.domainID) domainId,
        GROUP_CONCAT(b.domainName) domainName
FROM    projects a
        LEFT JOIN domain b
            ON a.domainID = b.domainID
GROUP BY a.proID

SQLFiddle デモ

于 2012-09-18T16:55:50.583 に答える
1

簡単な質問については、友人の助けを借りて解決されたので、主要なポイントを投稿しました。今、完全な DB スキーマとクエリを投稿しています。

スキーマ

CREATE TABLE projects
    (`projectId` int, `projectName` varchar(20))
;

INSERT INTO projects
    (`projectId`, `projectName`)
VALUES
    (1, 'P1'),
    (2, 'P2'),
    (3, 'P3')
;

CREATE TABLE domain
    (`domainId` int, `domainName` varchar(6))
;

INSERT INTO domain
    (`domainId`, `domainName`)
VALUES
    (1, 'Web'),
    (2, 'Mobile'),
    (3, 'iPhone')
;

CREATE TABLE prodomain
    (`domainId` int, `projectId` int)
;

INSERT INTO prodomain
    (`domainId`, `projectId`)
VALUES
    (1, 1),
    (1, 1),
    (3, 2),
        (2, 3)
;

クエリ

    SELECT p.projectId as proId, projectName, d.*, 
GROUP_CONCAT(d.domainId separator ', ') as all_domains_id, 
GROUP_CONCAT(d.domainName separator ', ') as all_domains_name 
FROM projects p 
    LEFT JOIN projectdomains pd ON p.projectId = pd.projectId
    LEFT JOIN domains d ON d.domainId = pd.domainId
    GROUP BY p.projectId
于 2012-09-18T17:25:39.937 に答える
0
SELECT 
    p.proId, 
    group_concat(d.domainId) as domainId, 
    group_concat(d.domainName) as domainName 
FROM 
    projects p 
    inner JOIN 
    domain d ON p.domainId = d.domainId
group by p.proId
order by p.proId
于 2012-09-18T17:00:11.507 に答える