sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför fungerar inte CROSS JOIN-villkoren i 'ON'-klausulen, bara WHERE-satsen?

CROSS JOIN är SQL-operatorn för att utföra en fullständig kartesisk produkt mellan två tabeller. Eftersom det är en kartesisk produkt tillåter den inga villkor under operationen , kan du bara begränsa dess resultat med någon filtreringsoperation (villkoret WHERE).

JOIN (INNER och OUTER JOIN, det vill säga) operatorer, är helt enkelt kartesiska produkter tillsammans med filtreringsoperatorn uttryckt i ON-delen av operatorn (och faktiskt i den ursprungliga syntaxen för SQL fanns det ingen JOIN-operator, bara "komma" notation för att beteckna produkten med kopplingsvillkoret uttryckt alltid i WHERE-delen).

Exempel:

"gammal" notation:

SELECT ...
FROM table1 t1, table2 t2
WHERE t1.attribute = t2.attribute

motsvarande den "moderna" notationen:

SELECT ...
FROM table1 t1 INNER JOIN table2 t2 ON t1.attribute = t2.attribute

medan, för den kartesiska produkten:

"gammal" notation:

SELECT ...
FROM table1 t1, table2 t2

motsvarande den "moderna" notationen:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Med andra ord, en CROSS JOIN som kräver ett villkor är faktiskt någon form av INNER JOIN.




  1. Skapa en UDF för MySQL i Delphi

  2. MySQL Flera räknas i en fråga med case

  3. Escape och infoga serialiserade data till MySQL

  4. Postgres Query Plan varför raduppskattning är så fel