Второй запрос более эффективен, так как он не возвращает таблицу supplier
(которая вам не нужна, поскольку вам нужен только поставщик sid
, который можно найти в таблице parts
).
Однако я не думаю, что он делает именно то, что вы хотите. Если поставщик имеет более одной красной или зеленой детали в своем каталоге, она появится несколько раз в наборе результатов. Вместо этого я бы рекомендовал агрегирование.
select c.sid
from parts p
inner join catalog c on c.pid = p.pid
where p.color in ('red', 'green')
group by s.id
Обратите внимание, что в этой версии запроса используются стандартные явные соединения (с ключевым словом on
), а не неявные соединения (с запятыми в предложении from
): этот синтаксис, созданный десятилетиями go, значительно усложняет написание, чтение и обслуживание запроса, и его не следует использовать в новом коде.