3

「id」、「master_id」、「searchMe」(簡略化)の3つの列を持つテーブル「movies」があります。単一の列「id」を持つ別のテーブル「temp_ids」があります。一時的なテーブルですが、それは問題ではないと思います。

テーブル「movies」に対して次のようなクエリを作成すると、

SELECT `id`, `master_id` FROM 'movies' WHERE searchMe = '1';

複数列の結果が得られます。ここで、すべての ID とすべての master_id を「temp_ids」テーブルに挿入したいと思いますが、一度に 1 つずつです。だから私の結果が

id_1 | master_1
id_2 | master_2
id_3 | NULL

temp_ids を次のようにしたい

id_1
master_1
id_2
master_2
id_3

したがって、結果のすべての列を独自の行に変換したいと考えています。どうすればエレガントな方法でそれを行うことができますか? id と master_id を別々に検索して、複数のクエリでそれを実行できることを知っています。また、PHP などでその問題を解決できることも知っています。しかし、そのようなことが可能であれば、単一の mysql-query でその問題を解決することをお勧めします。

私はこれのためにsqlfiddleを作りました: http://sqlfiddle.com/#!2/b4a7f/2

4

2 に答える 2

2

こんな感じだろう

INSERT INTO temp_ids(id)
SELECT id 
FROM
(
   SELECT id
   FROM FirstTable 
   UNION
   SELECT master AS id
   FROM SecondTable 
) t
于 2012-09-19T10:16:13.640 に答える
2

これSELECTに使用できるデータにはUNION ALL

SELECT  `id`
FROM movies
WHERE searchMe = 1
union all
SELECT `master_id`
FROM movies
WHERE searchMe = 1
  and master_id is not null

SQL Fiddle with Demoを参照してください

このようにすると、各列の値を区別できないため、いつでもインジケーターを追加できます。これにより、2 つの列が得られますが、データがどこから来たかがわかります。

SELECT  `id`, 'id' type
FROM movies
WHERE searchMe = 1
union all
SELECT `master_id`, 'master'
FROM movies
WHERE searchMe = 1
  and master_id is not null

次に、このクエリをINSERT INTO temp使用してこれを使用しますSELECT

于 2012-09-19T10:16:21.687 に答える