8

このようなMySQLテーブルがあります

id   Name   count
1    ABC    1
2    CDF    3
3    FGH    4

単に選択クエリを使用して、値を次のように取得します

1    ABC    1
2    CDF    3
3    FGH    4

このような結果を得るにはどうすればよいですか

1    ABC    1
2    CDF    3
3    FGH    4
4    NULL   0

最後の行が表示されます。レコードが完成したら、この形式の余分な行を last_id+1, Null ,0追加する必要があります。上で見ることができます。元のテーブルにはそのような行はありません。固定されていない N 行が存在する可能性があります 3,4

4

6 に答える 6

10

答えはとても簡単です

select (select max(id) from mytable)+1 as id, NULL as Name, 0 as count union all select id,Name,count from mytable;
于 2016-02-17T11:46:26.247 に答える
2

これは少し厄介に見えますが、機能するはずです。

SELECT a.id, b.name, coalesce(b.`count`) as `count`
FROM
    (
    SELECT 1 as ID
    UNION
    SELECT 2 as ID
    UNION
    SELECT 3 as ID
    UNION
    SELECT 4 as ID
    ) a LEFT JOIN table1 b
        ON a.id = b.id
WHERE a.ID IN (1,2,3,4)

更新1

単純に、1列のテーブルを生成できます。名前(ID)は、10,000以上のレコードが含まれていることが望ましいです。次に、元のレコードがあるテーブルと単純に結合できます。たとえば、 1列の名前のテーブルがあり、そのテーブルDummyRecordに10,000行があるとします。

SELECT a.id, b.name, coalesce(b.`count`) as `count`
FROM   DummyRecord a LEFT JOIN table1 b
        ON a.id = b.id
WHERE a.ID >= 1 AND 
      a.ID <= 4

それでおしまい。または、10から100にしたい場合は、この条件を使用できます

...
WHERE a.ID >= 10 AND 
      a.ID <= 100
于 2012-08-24T13:21:53.703 に答える
2

単に mysql ROLLUPを使用してください。

SELECT * FROM your_table
      GROUP BY Name WITH ROLLUP;
于 2014-06-02T12:00:43.350 に答える
0

id選択しているテーブルに が存在しない場合は、返されるすべてのリストに対して必要があります。このLEFT JOIN方法では、存在しないものには値idが返され、存在するものには真の値が返されます。null行う。

numbers数字で満たされた単一列のテーブルであるテーブルを作成することをお勧めします。

CREATE TABLE `numbers` (
    id int(11) unsigned NOT NULL
);

1そして、これまでに見た中で最も高いと思われるものから始めて、idさらに1000程度まで、大量の数字を挿入します。1安全のために からに行くかもしれません1000000。とにかく、遭遇する可能性をカバーするのに十分な高さであることを確認する必要がありidます.

その後、クエリは次のようになります。

SELECT n.id, a.*
FROM
    `numbers` n
    LEFT JOIN table t
        ON t.id = n.id
WHERE n.id IN (1,2,3,4);

idsこのソリューションにより、ユニオンのリストを含むサブクエリを必要とせずに、動的に増加するリストが可能になります。ただし、提供されている他のソリューションは、小さな既知のリストに対しても同様に機能します (また、動的に生成することもできます)。

于 2012-08-24T13:29:08.020 に答える
0
select
  x.id,
  t.name,
  ifnull(t.count, 0) as count
from
  (SELECT 1 AS id
    -- Part of the query below, you will need to generate dynamically,
    -- just as you would otherwise need to generate 'in (1,2,3,4)'
    UNION ALL SELECT 2
    UNION ALL SELECT 3
    UNION ALL SELECT 4
    UNION ALL SELECT 5
  ) x
  LEFT JOIN YourTable t 
    ON t.id = x.id
于 2012-08-24T13:27:46.540 に答える