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

Каква е разликата между използването и включването на присъединяване на таблици в MySQL?

Не използвам синтаксиса USING, тъй като

  1. повечето от моите обединения не са подходящи за него (не е същото име на поле, което се съпоставя, и/или множество съвпадения в обединението) и
  2. не е очевидно веднага в какво се превежда в случая с повече от две таблици

т.е. ако приемем 3 таблици с колони 'id' и 'id_2', прави ли

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

стават

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

или

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

или пак нещо друго?

Откриването на това за конкретна версия на базата данни е доста тривиално упражнение, но нямам голяма увереност, че е последователно във всички бази данни и не съм единственият човек, който трябва да поддържа моя код (така че други хора също ще трябва да са наясно на какво е еквивалент).

Очевидна разлика с WHERE срещу ON е ако присъединяването е външно:

Ако приемем T1 с едно поле ID, един ред, съдържащ стойността 1, и T2 с поле ID и VALUE (един ред, ID=1, VALUE=6), тогава получаваме:

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

не дава редове, тъй като се изисква WHERE да съвпада, докато

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

ще даде един ред със стойностите

1, NULL, NULL

тъй като ON се изисква само за съвпадение на съединението, което не е задължително, тъй като е външно.



  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 таблица съществува с PHP?

  2. Как да импортирате и експортирате база данни чрез SSH

  3. Как да намеря местоположението на MySQL my.cnf

  4. PHP фатална грешка:Извикване на недефинирана функция mysqli_stmt_get_result()

  5. създадох масиви в PHP 5.6 с [] в PHP 7.1 дават фатална грешка