Запрос не похож на sql

avatar
Fyp16
8 апреля 2018 в 06:15
80
2
3

У меня есть две таблицы, сотрудники и автомобили.

  • Сотрудники (emp_id,first_name,last_name)
  • Транспортные средства (vehicle_id, Vehicle_type, emp_id)

Допустим, тип транспортного средства имеет значение автомобиль и мотоцикл.

У некоторых сотрудников нет машины и мотоцикла, у некоторых есть только машина или мотоцикл, у некоторых есть и машина, и мотоцикл.

Мой вопрос: как найти сотрудника, у которого нет машины?

Ниже приведен мой запрос, но результат неверен, так как он по-прежнему получает сотрудника, у которого есть и автомобиль, и мотоцикл.

SELECT e.emp_id,e.first_name, e.last_name,v.vehicle_type
FROM employees e 
LEFT JOIN vehicles v
ON e.emp_id= v.emp_id
WHERE NOT vehicle_type='car' 
GROUP BY e.emp_id;
Источник

Ответы (2)

avatar
Siyon DP
8 апреля 2018 в 09:13
1

Более интуитивный ответ, Сначала наймите сотрудников, у которых есть машина — это просто

SELECT DISTINCT e.emp_id
FROM employees e JOIN vehicles v
                      ON e.emp_id= v.emp_id 
WHERE v.vehicle_type='car' 

Теперь вы можете легко получить список других сотрудников

SELECT e.emp_id,e.first_name, e.last_name,v.vehicle_type
FROM employees e LEFT OUTER JOIN vehicles v
                               ON e.emp_id= v.emp_id 
WHERE e.emp_id NOT IN (SELECT DISTINCT e.emp_id
                       FROM employees e JOIN vehicles v
                                             ON e.emp_id= v.emp_id 
                       WHERE v.vehicle_type='car' )
avatar
Mureinik
8 апреля 2018 в 06:21
2

Вы можете использовать оператор not exists:

SELECT e.*
FROM   employees e 
WHERE  NOT EXISTS (SELECT *
                   FROM   vehicles v
                   WHERE e.emp_id = v.emp_id AND vehicle_type = 'car'
                  )