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

Вътрешно и външно съединение; важен ли е редът на таблиците от?

Вярвам, че можете да мислите за това като проблем с приоритета на оператора.

Когато пишете това:

FROM groups grp,
     insrel archiverel  
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber   
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber   

Мисля, че се интерпретира от анализатора по следния начин:

FROM groups grp,
(
  (
     insrel archiverel  
     LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber   
  )
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
)

Ако е така, тогава в най-вътрешното съединение "grp" е необвързано.

Когато обърнете редовете с „groups“ и „insrel“, най-вътрешното присъединяване се прилага за „groups“ и „ownrel“, така че работи.

Вероятно и това ще работи:

    FROM groups grp
         JOIN insrel archiverel  ON archiverel.dnumber = grp.number
    LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber   
    LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber 
WHERE archiverel.snumber = 11128188


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съвети за наблюдение на PostgreSQL за Moodle

  2. алтернатива на mysql_insert_id за postgresql

  3. Паралелен unnest() и ред на сортиране в PostgreSQL

  4. Синтактична грешка на Postgres drop table

  5. Как да създадете PostgreSQL разделена последователност?