2014-09-25 2 views
0

ли это количество запросов на внутреннее соединение:Наличие между оператором в внутреннем соединении, где положение

select * from a, b where a.start_date between b.start_date and b.end_date; 

Это так кажется, но я смущен, потому что я всегда склонен думать, что внутреннее соединение должно иметь = оператор в предложении where, в отличие от оператора «между»

+0

ваша база данных? – Mihai

+0

В теории это так называемое полукрестное соединение. – ibre5041

ответ

0

Да. Фактическая проверка не означает ничего для соединения, кроме обеспечения правильной связи и не достижения всех результатов.

1

использовать JOIN вместо таблиц, разделенных

то же самое состояние с присоединиться выглядит как этот

select * from a 
JOIN b ON a.start_date between b.start_date and b.end_date; 
+0

Оба возвращают тот же набор результатов (и я думаю, что тот же план запроса), так что это действительно вопрос предпочтения, однако из аспекта читаемости большинство людей считают, что синтаксис соединения немного читабельнее. – user2366842

+0

@ user2366842, это не вопрос преимущественного использования, имплицитные соединения (запятые) имеют несколько проблем, связанных с использованием исключаемых объединений, таких как случайные кросс-соединения. Явные объединения легче понять намерение, которое делает их более удобными (было ли это перекрестное соединение там специально или случайно, вы можете сказать с явным объединением, вы не можете с имплицитными объединениями). Поскольку все основные базы данных теперь поддерживают явные объединения, нет причин не использовать явные объединения и несколько причин не использовать соединения implict. – HLGEM

Смежные вопросы