MySQLは1行のみを返す4つのテーブルを結合します

灰:

申し訳ありませんが私の悪い英語のために、私は、MySQL 4のテーブルからデータを取得するための要件を持っていますが、それだけで1行を返します。

表1

col_2でTABL 1は、表2 col_2から基準として数値データを含みます

+----+-------+---------+
| id | col_1 | col_2   |
+----+-------+---------+
| 1  |   A   |  4      |
| 2  |   B   |  5      |
| 3  |   C   |  6      |
+----+-------+---------+

表2

+----+-------+---------+
| id | col_1 | col_2   |
+----+-------+---------+
| 1  |   A   |  4      |
| 2  |   B   |  5      |
| 3  |   C   |  6      |
| 4  |   C   |  7      |
| 5  |   C   |  8      |
+----+-------+---------+

表3

表3 COL_1は表1のIDの数値を有するが、テーマのほとんどが同じIDになり、そしてcol_2は表4からのIDの数値を有します

+----+-------+---------+
| id | col_1 | col_2   |
+----+-------+---------+
| 1  |   1   |  1      |
| 2  |   1   |  2      |
| 3  |   1   |  3      |
| 4  |   2   |  4      |
| 5  |   2   |  5      |
| 6  |   4   |  8      |
| 7  |   4   |  1      |
| 8  |   5   |  2      |
| 9  |   5   |  5      |
| 10 |   5   |  8      |
| 11 |   5   |  9      |
| 12 |   5   |  10     |
+----+-------+---------+

表4

+----+-------+
| id | col_1 |
+----+-------+
| 1  |   A   |
| 2  |   B   |
| 3  |   C   |
+----+-------+

クエリは、私がデータを取得するために実行します。

SELECT
    t1.id,
    t1.col_1,
    t2.col_1 as result_0,
    GROUP_CONCAT(t4.col_1) as result
FROM
    table_1 AS t1
LEFT JOIN table_2 AS t2
    ON t2.col_2 = t1.col_2
LEFT JOIN table_3 AS t3
    ON t3.col_1 = t1.id
LEFT JOIN table_4 AS t4
    ON t4.id = t3.col_2
WHERE t1.col_2 > 1
ORDER BY t1.id DESC

表3は、表1と表4から精IDを持っているあなたが見ることができるように私は、クエリは怒鳴るように私を返すようにしたいので、両方のテーブルには、値を持っています。それは私が表4からの値はカンマで区切るすることを意味します。

+----+-----------+-----------+-----------+
| id | result_1  | result_2  | result_3  |
+----+-----------+-----------+-----------+
| 1  |   A       |    A      |    A,B,C  |
| 2  |   B       |    B      |    A,B    |
| 3  |   C       |    C      |    C,B    |  
+----+-----------+-----------+-----------+

UPDATE:ここでの要求に応じて、クエリのフィドルです。

SQLフィドルhttp://sqlfiddle.com/#!9/3af0af/1感謝

サンディープモーダカ:

あなたが投稿フィドルに基づいて、

あなたがしなければならないにクエリを変更します: -

SELECT
    t1.id,
    t1.name,
    t2.role as result_0,
    GROUP_CONCAT(t4.ct) as result
FROM
    table_one AS t1
LEFT JOIN table_tow AS t2
    ON t2.level = t1.level
 JOIN table_three AS t3                       //CHANGED LEFT JOIN TO JOIN
    ON t3.vid = t1.id
LEFT JOIN table_four AS t4
    ON t4.id = t3.cid
WHERE t1.level > 1
group by t1.id ORDER BY t1.id ASC            //ADDED group by t1.id AND CHANGED ORDER BY t1.id DESC TO ORDER BY t1.id ASC

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=278029&siteId=1