Börja med att lägga till en tabell och infoga två rader:
CREATE TABLE dbo.MyInvoice (MyInvoiceID int,RegDate date)
GO
INSERT dbo.MyInvoice (MyInvoiceID,RegDate)
VALUES (1,'2011-01-13'),(2,'2011-01-14')
GO
Lägg sedan till ytterligare en tabell med ett par rader som relaterar till den första fakturan (MyInvoiceID = 1) ovan:
CREATE TABLE dbo.MyInvoiceRecord (MyInvoiceRecordID INT,MyInvoice INT,Amount INT)
GO
INSERT dbo.MyInvoiceRecord(MyInvoiceRecordID,MyInvoice,Amount)
VALUES (1,1,500),(2,1,300)
GO
Vi vill nu ta ut en fråga som visar alla fakturor, men inte ta med de fakturarader som har ett värde under 400. Det är då lätt att man skriver på följande sätt:
SELECT *
FROM MyInvoice
LEFT JOIN MyInvoiceRecord ON yInvoice.MyInvoiceID = MyInvoiceRecord.MyInvoice
WHERE MyInvoiceRecord.Amount>400
Men om vi nu använder tabellen MyInvoiceRecord (som ligger i en outer join) i where-delen kommer frågan exekveras som en inner join, dvs fakura med id 1 kommer inte med, då den saknar fakturarader. Lösningen är att lägga villkoret vid ON istället:
SELECT *
FROM MyInvoice
LEFT JOIN MyInvoiceRecord ON MyInvoice.MyInvoiceID = MyInvoiceRecord.MyInvoice AND MyInvoiceRecord.Amount>400
Ta bort tabellerna:
DROP TABLE dbo.MyInvoice
GO
DROP TABLE dbo.MyInvoiceRecord
GO
Text: Per Sjöblom