Mysql
 sql >> база данни >  >> RDS >> Mysql

Условие INNER JOIN в клауза WHERE или клауза ON?

За вътрешни съединения като това те са логически еквивалентни. Въпреки това можете да попаднете в ситуации, при които условие в клаузата за присъединяване означава нещо различно от условие в клаузата where.

Като проста илюстрация, представете си, че правите ляво присъединяване по този начин;

select x.id
from x
       left join y
         on x.id = y.id
;

Тук вземаме всички редове от x, независимо дали има съвпадащ идентификатор в y. Сега да кажем, че нашето условие за присъединяване нараства – ние не търсим само съвпадения в y въз основа на идентификатора, но и на id_type.

select x.id
from x
       left join y
         on x.id = y.id
         and y.id_type = 'some type'
;

Отново това дава всички редове в x, независимо дали има съвпадение (id, id_type) в y.

Това обаче е много различно:

select x.id
from x
       left join y
         on x.id = y.id
where y.id_type = 'some type'
;

В тази ситуация избираме всички редове от x и се опитваме да съпоставим с редове от y. Сега за редове, за които няма съвпадение в y, y.id_type ще бъде нула. Поради това y.id_type ='some type' не е удовлетворен, така че тези редове, където няма съвпадение, се отхвърлят, което ефективно превръща това във вътрешно присъединяване.

Накратко:за вътрешните съединения няма значение къде отиват условията, но за външните съединения може.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете разстоянието между две точки, като използвате географска ширина и дължина в mysql

  2. Тип/структура на данни за съхраняване на изместване на часовата зона в MySQL

  3. JPA не се актуализира колоната с клас Converter

  4. Как мога да избера най-дългото текстово поле, когато използвам GROUP BY в mysql, a la MAX()?

  5. Използвам ли JDBC пул за връзки?