1

次のような多対多のデー​​タベースを作成しました。

CREATE TABLE Films (  
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),    
Title VARCHAR(255));

CREATE TABLE Ambiences (  
id INT NOT NULL AUTO_INCREMENT,   
PRIMARY KEY(id),  
ambienceName VARCHAR(255));

CREATE TABLE Films_Ambiences (
film_id INT NOT NULL,  
ambience_id INT NOT NULL,  
PRIMARY KEY (film_id, ambience_id),  
FOREIGN KEY (film_id) REFERENCES Films(id) ON UPDATE CASCADE,  
FOREIGN KEY (ambience_id) REFERENCES Ambiences(id) ON UPDATE CASCADE);

今:いくつかのデータを挿入し、テーブルを結合して取得しました:

╔════════╦════╦══════════╗  
║ Title  ║ id ║ Ambience ║  
╠════════╬════╬══════════╣  
║ film_1 ║  1 ║ Funny    ║
║ film_1 ║  1 ║ Sad      ║
║ film_2 ║  2 ║ Funny    ║
║ film_2 ║  2 ║ Sad      ║
╚════════╩════╩══════════╝  

ただし、私の目的は、次のように、film_1 を 1 行に、film_2 を 2 行目に表示することです。

╔════════╦════╦══════════╗  
║ Title  ║ id ║ Ambience ║  
╠════════╬════╬══════════╣  
║ film_1 ║  1 ║ Funny,Sad║
║ film_2 ║  2 ║ Funny,Sad║
╚════════╩════╩══════════╝  

私は使用しようとしていますGROUP_CONCATが、代わりに次のようになります:

╔════════╦════╦════════════════════════╗
║ Title  ║ id ║        Ambience        ║
╠════════╬════╬════════════════════════╣
║ film_1 ║  1 ║ funny, funny, sad, sad ║
╚════════╩════╩════════════════════════╝ 

すべての行を 1 つの行にマージします。これがそのためのSQLFiddleです。

4

1 に答える 1

2

追加する必要がありますGROUP BY:

SELECT title,
       GROUP_CONCAT(ambienceName SEPARATOR ' ') AS ambiences
FROM   Films AS f 
   INNER JOIN Films_Ambiences as fa
         ON f.id = fa.film_id           
   INNER JOIN Ambiences AS a
         ON a.id = fa.ambience_id
GROUP  BY title

更新されたフィドル

結果は次のとおりです。

TITLE   AMBIENCES
film1   sad happy
film2   sad happy
于 2013-07-06T14:29:28.210 に答える