sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor returnerer min venstre join ikke nul?

æ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) 


  1. Problemet med MySQL MyISAM-tabellens ydeevne er genset

  2. Slet første X linjer i en database

  3. Kun variabler kan videregives ved reference - php

  4. MySQL vælg et felt fra tabellen WHERE betingelse er i flere rækker