2 つのテーブルを作成します。
CREATE TABLE IF NOT EXISTS `table2` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`hash_id` char(24) NOT NULL DEFAULT '0',
`name` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `hash_id` (`hash_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`table2_id` bigint(20) unsigned DEFAULT NULL,
`name` varchar(40) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `table2_id` (`table2_id`),
CONSTRAINT `table1_ibfk_1` FOREIGN KEY (`table2_id`) REFERENCES `table2` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
目標はtable1
、table2
対応するtable2_id
. LEFT JOIN を使用した次のクエリは、まさに私が望むものを提供します。
SELECT t1.id, p1.hash_id, p1.name
FROM table1 as t1
LEFT JOIN (
SELECT id,name,hash_id FROM table2)
as p1
ON t1.table2_id = p1.id
WHERE t1.id IN ('1','3')
しかし、あまり効率的ではないようです。どのように最適化できますか?または、同等のクエリをアドバイスできますか?ここで説明の結果を見ることができます。http://sqlfiddle.com/#!2/5502f/13/0