Найти записи из разных таблиц

требование

Найдите и отобразите всех пилотов (идентификатор и имя сотрудника), которые выполняли полеты на самолетах типа "Пригородный" и "Обычный".

1st image is Plane_new table
2nd image is FlightI_new table
3rd image is Employee_new table

Решение

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype = 'Commuter' AND plane_new.ptype = 'Normal';

Код работает с ИЛИ, но по какой-то причине с И я получаю "строки не возвращаются".

Есть идеи как это решить?

2 ответа

Решение

Ваш AND не работает, потому что записи не могут иметь оба ptype на той же записи. Но вы должны быть в состоянии использовать что-то вроде этого:

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new 
    ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype IN ('Commuter', 'Normal')
GROUP BY flightI_new.eid, employee_new.ename
HAVING count(distinct plane_new.ptype) = 2;

Смотрите SQL Fiddle с демо

Из вас можно использовать что-то вроде этого:

SELECT distinct flightI_new."eid", employee_new."name"
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new."eid" = employee_new."eid"
INNER JOIN plane_new 
    ON flightI_new."pnum" = plane_new."pnum"
WHERE plane_new."ptype" = 'commuter'
  AND flightI_new."eid" IN (select flightI_new."eid"
                            FROM flightI_new
                            INNER JOIN employee_new 
                                ON flightI_new."eid" = employee_new."eid"
                            INNER JOIN plane_new 
                                ON flightI_new."pnum" = plane_new."pnum"
                            WHERE plane_new."ptype" = 'normal')

Смотрите SQL Fiddle с демо

Неправильно здесь

      WHERE plane_new.ptype = 'Commuter' AND plane_new.ptype = 'Normal';

plane_new.ptype не может иметь две вещи, компьютерную и обычную в вашей базе данных, это должна быть одна из них, поэтому вы не получите возвращаемых строк. так что, возможно, вы имеете в виду что-то еще здесь, в вашей где вы можете использовать только OR, и они вернули строки те, кто computer а также normal

Другие вопросы по тегам