-2

~35.000.000 行のテーブル (MySQL) があり、ID 順にすべてのデータを取得する必要があります。

表:データ

+--+-----+-----+
|id|field|value|
+--+-----+-----+
|1 |  x  |  10 |
+--+-----+-----+
|1 | y   |  12 |
+--+-----+-----+
|2 | x   |  24 |
+--+-----+-----+
|2 | y   |  25 |
+--+-----+-----+
|3 | z   |  1  |
+--+-----+-----+
|3 | a   |  4  |
+--+-----+-----+
|3 | b   | 7.1 |
+--+-----+-----+

取得する必要があります:

+--+--+----+
|10|12|NULL|    <--- ID:1
+--+--+----+
|24|25|NULL|    <--- ID:2
+--+--+----+
|1 | 4|7.1 |    <--- ID:3
+--+--+----+

私のクエリ:

SELECT
(
    SELECT
        value
    FROM
        data
    WHERE
        EXISTS(
            SELECT
                1
            FROM
                members
            WHERE
                data.id = members.id
            LIMIT 1
        )
)

私の結果:

#1241 - Operand should contain 1 column(s)

これを行う方法はありますか?MySQLのみで効率的ですか?

4

2 に答える 2

1

あなたがコメントで言ったように:

i need only value column, but all value column in one row by id.

この場合、GROUP_CONCAT 関数を使用できます。私はあなたのケースを最小限の実例に単純化しました:

mysql> SELECT * FROM data;
+----+-------+
| id | value |
+----+-------+
|  1 | 1     |
|  1 | 2     |
|  2 | 3     |
|  2 | 4     |
|  2 | 5     |
+----+-------+
5 rows in set (0.00 sec)

SELECT
    data.id,
    GROUP_CONCAT(data.value)
FROM
    data
GROUP BY
    data.id;

gives this:

+----+--------------------------+
| id | GROUP_CONCAT(data.value) |
+----+--------------------------+
|  1 | 1,2                      |
|  2 | 3,4,5                    |
+----+--------------------------+

SQL フィドルは一時的に利用できないため、CREATE TABLE ステートメントを指定します。

CREATE TABLE `data` (
  `id` int(11) NOT NULL,
  `value` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `data` VALUES (1,'1'), (1, '2'),(2,'3'),(2,'4'),(2,'5');
于 2013-09-06T19:36:07.947 に答える