sql >> Databáze >  >> RDS >> Sqlserver

Je lepší udělat equi spojení v klauzuli from nebo where

Obecně řečeno to nedělá žádný sémantický rozdíl.

Existuje však jeden okrajový případ, kdy to může udělat. Pokud (zastaralé) GROUP BY ALL konstrukt je přidán do dotazu, jak je znázorněno níže.

DECLARE @A TABLE(A_ID INT, DURATION DECIMAL(3,2) )
INSERT INTO @A VALUES(1,2.00)

DECLARE @B TABLE(A_ID INT)
INSERT INTO @B VALUES(1)

/*Returns one row*/
SELECT *
FROM @A A
INNER JOIN @B B ON A.A_ID = B.A_ID
WHERE A.DURATION = 3.00
GROUP BY ALL A.A_ID, A.DURATION, B.A_ID

/*Returns zero rows*/    
SELECT *
FROM @A A
INNER JOIN @B B ON A.A_ID = B.A_ID  AND A.DURATION = 3.00
GROUP BY ALL A.A_ID, A.DURATION, B.A_ID


  1. MySQL UPDATE a SELECT v jednom průchodu

  2. Problém s přístupem k MySQL z Javy

  3. Přehled příkazu DBCC SHRINKFILE

  4. Upgradoval jsem SQL Server ODBC Driver a výkon byl negativně ovlivněn. Co můžu dělat?