ændre join items i
... for at VENSTRE forbinde elementer i
... og din forespørgsel skulle fungere, som du forventer.
REDIGER
Du kan ikke filtrere LEFT JOIN-tabeller i where-sætningen, medmindre du tager højde for nuller, fordi den venstre join tillader, at disse kolonner har en værdi eller er null, når ingen rækker matcher:
og i.siteid =132
vil smide enhver af dine rækker væk, der har en NULL i.siteid
, hvor ingen fandtes. Flyt dette til ON:
venstre sammenføjning af elementer i på ic.itemid =i.itemid og i.siteid =132
eller lav WHERE-håndtag NULL:
HVOR ... OG (i.siteid =132 ELLER i.siteid ER NULL)
REDIGER baseret på OP's edit 3
SET NOCOUNT ONDECLARE @Categories table (CategoryID int,Title varchar(30))INSERT @Categories VALUES (1,'Cat AAA')INSERT @Categories VALUES (2,'Cat BBB')INSERT @Categories VALUES (3,'Cat CCC')DECLARE @SubCategories table (SubCategoryID int,CategoryID int,Title varchar(30))INSERT @SubCategories VALUES (1,1,'SubCat AAA A')INSERT @SubCategories VALUES (2,1,' SubCat AAA B')INSERT @SubCategories VALUES (3,1,'SubCat AAA C')INSERT @SubCategories VALUES (4,2,'SubCat BBB A')DECLARE @ItemCategories tabel (ItemCategoryID int, ItemID int, SubCategoryID int, IsActiveID int char(1))INSERT @ItemCategories VALUES (1,1,2,'Y')INSERT @ItemCategories VALUES (2,2,2,'Y')INSERT @ItemCategories VALUES (3,3,2,'Y') INSERT @ItemCategories VALUES (4,4,2,'Y')INSERT @ItemCategories VALUES (5,7,2,'Y')DECLARE @Items table (ItemID int, Title varchar(30), SiteID int)INSERT @Items VALUES (1,'Item A',111)INSERT @Items VALUES (2,'Item B',111)INSERT @Items VALUES (3,'Item C',132)INSERT @Items VALUES (4,'Item D' ,111)INSER T @Items VALUES (5,'Item E',111)INSERT @Items VALUES (6,'Item F',132)INSERT @Items VALUES (7,'Item G',132)SET NOCOUNT OFF
Jeg er ikke 100 % sikker på, hvad OP'en er ude efter, dette vil returnere al information, der kan tilsluttes, når siteid=132
som angivet i spørgsmålet
VÆLG c.title som kategorititel ,s.titel som underkategorititel ,i.titel som itemtitle --,i.itemID, ic.SubCategoryID, s.CategoryID FRA @Items i VENSTRE YDRE JOIN @ItemCategories ic ON i .ItemID=ic.ItemID LEFT OUTER JOIN @SubCategories s ON ic.SubCategoryID=s.SubCategoryID LEFT OUTER JOIN @Categories c ON s.CategoryID=c.CategoryID WHERE i.siteid =132
OUTPUT:
categorytitle underkategorititel itemtitle---------------------------------------------------- ------------------ ------------------------------------Kat AAA SubCat AAA B Item CNULL NULL Item FCat AAA SubCat AAA B Item G(3 række(r) påvirket)
Dette vil vise alle kategorier, selvom der ikke er noget match til siteid=132
;WITH AllItems AS(SELECT s.CategoryID, ic.SubCategoryID, ItemCategoryID, i.ItemID ,c.title AS categorytitle, s.title som subcategorytitle, i.title som itemtitle FROM @Items i LEFT OUTER JOIN @ItemCategories ic ON i.ItemID=ic.ItemID LEFT OUTER JOIN @SubCategories s ON ic.SubCategoryID=s.SubCategoryID LEFT OUTER JOIN @Categories c ON s.CategoryID=c.Category.ID=c.Category. ,itemtitle FROM AllItemsUNIONSELECT c.Title, s.Title, null FROM @Categories c LEFT OUTER JOIN @SubCategories s ON c.CategoryID=s.CategoryID LEFT OUTER JOIN @ItemCategories ic ON s.IDgoicateI PÅ c.CategoryID=i.CategoryID OG s.SubCategoryID=i.SubCategoryID HVOR i.ItemID ER NULLORDER BY categorytitle,subcategorytitle
OUTPUT:
categorytitle underkategorititel itemtitle---------------------------------------------------- ------------------- ------------------------------NUL NULL Item FCat AAA SubCat AAA A NULLCat AAA SubCat AAA B Item CCat AAA SubCat AAA B Item GCat AAA SubCat AAA C NULLCat BBB SubCat BBB A NULLCat CCC NULL NULL(7 række(r) påvirket)