DROP DATABASE IF EXISTS testing; CREATE DATABASE testing; USE testing; CREATE TABLE `manufacturers` ( `id` int(16) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `ships` ( `id` int(16) NOT NULL AUTO_INCREMENT, `owners_id` int(16) NOT NULL DEFAULT '0', `manufacturers_id` int(16) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `owners_idx` (`owners_id`), KEY `manufacturers_idx` (`manufacturers_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `owners` ( `id` int(16) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO owners VALUES (1); INSERT INTO ships VALUES (1, 1, 1); INSERT INTO ships VALUES (2, 1, 2); INSERT INTO ships VALUES (3, 1, 2); INSERT INTO ships VALUES (4, 1, 1); INSERT INTO manufacturers VALUES (1); INSERT INTO manufacturers VALUES (2); SET optimizer_switch='semijoin=on'; SELECT * FROM manufacturers WHERE manufacturers.id IN ( SELECT ships.manufacturers_id FROM owners JOIN ships ON owners.id = ships.owners_id WHERE owners.id = 1 ); id 1 2 SELECT * FROM manufacturers; id 1 2