こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQL SELECTの指定について

まず、御覧頂きありがとうございます。
早速質問なのですが、

CREATE TABLE `hoge` (
`id` int(8) NOT NULL,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `hoge` (`id`, `name`) VALUES
(1, 'hogeA'),
(2, 'hogeB'),
(3, 'hogeC'),
(4, 'hogeD');

CREATE TABLE `test` (
`id` int(8) NOT NULL,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`id`, `name`) VALUES
(1, 'testA'),
(4, 'testD');

という値が入ってるテーブルがあるとします。(長くなってすみません)
で、 hoge.id と test.id が重複した場合 test.name を表示させたいです。
期待値としては

id,name
1.testA
2,hogeB
3,hogeC
4,testD

になります。
業務でJoinを使うようなテーブル構造にそもそもしないというのもあり、クリティカルなSQLコードに不慣れで御知恵を借りたく質問させて頂きました。
よろしくお願いします。

投稿日時 - 2014-03-18 18:06:56

QNo.8519092

困ってます

質問者が選んだベストアンサー

OUTER JOIN して COALESCE で選択する方法も有りますね。
ただし、MySQLでは FULL OUTER JOIN が使えないので、LEFT OUTER JOIN と RIGHT OUTER JOIN を UNION する必要が有りますが。

SELECT id, COALESCE(test.name, hoge.name) AS name
FROM hoge LEFT OUTER JOIN test USING(id)
UNION
SELECT id, COALESCE(test.name, hoge.name) AS name
FROM hoge RIGHT OUTER JOIN test USING(id);


もし、test の中の id が全て hoge にも有るのでしたら、↓だけでも良いです。

SELECT id, COALESCE(test.name, hoge.name) AS name
FROM hoge LEFT OUTER JOIN test USING(id);


http://dev.mysql.com/doc/refman/5.1/ja/join.html
http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html#function_coalesce

投稿日時 - 2014-03-19 02:42:04

お礼

ありがとうございます。
大変参考になりました。

投稿日時 - 2014-03-19 19:59:53

ANo.2

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

単純にunionでidの一覧をつくって
それぞれをleft joinすればいいような気がしますが

select t1.id,coalesce(t3.name,t2.name) as name
from (SELECT id FROM hoge
UNION SELECT id FROM test) as t1
left join hoge as t2 on t1.id=t2.id
left join test as t3 on t1.id=t3.id

投稿日時 - 2014-03-19 10:59:19

お礼

返事が遅れてすみませんでした。
大変参考になりました。

投稿日時 - 2014-03-19 19:59:50

ANo.1

select id ,name from hoge where id not in (select id from test)
union select id,name from test order by 1

投稿日時 - 2014-03-18 20:50:24

お礼

返事が遅れてすみませんでした。
大変参考になりました。

投稿日時 - 2014-03-19 19:59:48

あなたにオススメの質問