Запрос на выборку данных

MySQL базы данных sql select

Дана схема БД:

create table people (
id int,
name char(64),
primary key (id)
);

create table document (
type enum ('passport', 'driver_license'),
number int,
person_id int,
primary key (type, number)
);

Напишите SQL-запрос, выбирающий имена людей с паспортом, но без водительских прав.

Одним из вариантов решения я посчитал использование двух внешних соединений к таблице `people` с последующей фильтрацией в разделе `where`:
http://sqlfiddle.com/#!2/af83e/23/0

Какие ещё могут быть варианты решения этой задачи?

Примечание:
2Ant1973: Спасибо, мне всегда казалось, что JOIN быстрее срабатывает, нежели подзапрос.

Примечание:
http://sqlfiddle.com/#!2/af83e/38
http://sqlfiddle.com/#!2/af83e/39
http://sqlfiddle.com/#!2/af83e/40

Мне сложно даётся анализ запросов (опыт, увы, отсутствует), но тут на мой взгляд явно не хватает индексов.
Ответы:
На примечание №1.
Нельзя говорить что такой-то вариант всегда быстрее такого-то, всегда надо смотреть на планы запросов. Оптимизатор вполне может построить одинаковые планы для разных запросов. Или у двух одинаковых запросов могут быть разные планы в зависимости, например, от количества записей в таблице.
Еще один вариант (правда хорошим его не назовешь):
SELECT p.name, GROUP_CONCAT(d.type SEPARATOR ',') AS `doc_type` FROM `people` AS `p` LEFT JOIN `document` AS `d` ON d.person_id = p.id GROUP BY p.id HAVING `doc_type` = 'passport'


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.