2

私の質問は、メイン行を複製せずにプロパティの複数の値を文字列に取得することです。

私の問題を説明するために、簡単な例を使用します。

エンティティ - 関係図

ダイアグラム

たとえば、次のデータを使用します。

ここに画像の説明を入力

フィールドに Property_1 を連結し、別のフィールドに Property_2 を連結した "TABLE" のいくつかの要素を取得したいと考えています。ただし、「TABLE」の行を決して複製しないことが重要です

たとえば、Row1 と Row4 を取得するクエリは次のようになります。

1 Row1 "P1_1, P1_2" "P2_1, P2_2"
4 Row4 "P1_3" "P2_3"

データベース構造/データの例:

CREATE TABLE table1(
    id INT AUTO_INCREMENT,
    value VARCHAR(10),
    PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE property_1(
    id INT AUTO_INCREMENT,
    value VARCHAR(10),
    table1 INT,
    PRIMARY KEY(id),
    FOREIGN KEY (table1) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE property_2(
    id INT AUTO_INCREMENT,
    value VARCHAR(10),
    table1 INT,
    PRIMARY KEY(id),
    FOREIGN KEY (table1) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=latin1;
INSERT INTO table1 (value) VALUES 
    ('Row1'),('Row2'),('Row3'),('Row4'),('Row5'),('Row6');
INSERT INTO property_1 (value, table1) VALUES 
    ('P1_1', 1), ('P1_2', 1), ('P1_3', 4), ('P1_4', 6);
INSERT INTO property_2 (value, table1) VALUES 
    ('P2_1', 1), ('P2_2', 1), ('P2_3', 4), ('P2_4', 5);

次のようなクエリをいくつか試しました。

SELECT t.*, GROUP_CONCAT(p1.value), GROUP_CONCAT(p2.value) 
FROM table1 t 
    LEFT JOIN property_1 p1 ON p1.table1=t.id 
    LEFT JOIN property_2 p2 ON p2.table1=t.id 
WHERE t.id IN (1,4) 
GROUP BY t.id;

しかし、その結果、property_1 および property_2 文字列の値が重複しています。

そう:

プロパティが文字列に連結された table1 の個別の行を取得する方法は?

4

1 に答える 1