-1

2つのテーブルがあります。1つはIDを持ち、もう1つは名前を持ちます。たとえば、一部のIDは必須ではありません(null許容です)。

rowId item1Id, item2Id, item3Id (item3Id can be null)

この2つのテーブルを結合すると、IDと名前が取得されます。ただし、item3 Idがnullの場合、その行は表示されません。

いくつかのデータ:

表1

rowId、item1Id、item2Id、item3Id

1、2、3、4

2、1、5、NULL

この場合、結果として1行(1行)が得られます。

したがって、表2に存在せず、行が表示されていない場合はnullですが、nullを表示したいと思います。したがって、これら2つのテーブルを結合したままにすると、結果は2行になります。

これはSQLです:

SELECT Recipes.recipeId, Recipes.userId,Users.firstName + ' ' + Users.lastName as userName,  servingTypeId,
Codings.coding as servingType, categoryId, Codings_2.coding as healthAspects, continentId,
Codings_3.coding as continent, countryId, CodingsAssociated.coding as country, typeOfPreparationId,
Codings_4.coding as typeOfPreparation, flavourId, Codings_5.coding as flavour, preparationSkillId,
Codings_6.coding as preparationSkill, seasonId,  activePreparationTime,
overallPreparationTime, isLocalDelight, servings, Codings_7.coding as season ,
calories, youTubeId, datePosted, isComposite, Recipes.isApproved, Recipes.timestamp, title,
localDelightRegion, otherFeatures, cookingInstructions 
      FROM Recipes LEFT OUTER JOIN

      Codings ON Recipes.servingTypeId = Codings.codingKeyId LEFT OUTER JOIN
      Codings as Codings_2 ON Recipes.categoryId = Codings_2.codingKeyId LEFT OUTER JOIN
      Codings as Codings_3 ON Recipes.continentId = Codings_3.codingKeyId LEFT OUTER JOIN
      CodingsAssociated ON Recipes.countryId = CodingsAssociated.codingKeyId LEFT OUTER JOIN
      Codings as Codings_4 ON Recipes.typeOfPreparationId = Codings_4.codingKeyId LEFT OUTER JOIN
      Codings as Codings_5 ON Recipes.flavourId = Codings_5.codingKeyId LEFT OUTER JOIN
      Codings as Codings_6 ON Recipes.preparationSkillId = Codings_6.codingKeyId LEFT OUTER JOIN
      Codings as Codings_7 ON Recipes.seasonId = Codings_7.codingKeyId  LEFT OUTER JOIN
      RecipesTranslations ON Recipes.recipeId = RecipesTranslations.recipeId LEFT OUTER JOIN
      Users ON Recipes.userId = Users.userId

      WHERE CodingsAssociated.languageId = @languageId AND Codings.languageId = @languageId
      AND Codings_2.languageId = @languageId AND Codings_3.languageId = @languageId
      AND Codings_4.languageId = @languageId AND
      Codings_5.languageId = @languageId AND Codings_6.languageId = @languageId AND RecipesTranslations.languageId = @languageId
      AND Codings_7.languageId = @languageId

たとえば、seasonIdがnullになることがあるため、Codings_7.codingの結合は表示されませんが、idがnullで、名前もnullであるこれらの行も表示しません。

4

2 に答える 2

2

ここで何が求められているかを判断するのは難しいですが、外部結合を行う必要があると思います。tsqlタグから、MS SQLサーバーを使用していると思われるので、http://msdn.microsoft.comにアクセスします。 /en-us/library/aa213228(v=sql.80).aspx

例えば:

SELECT *
FROM table1 a LEFT OUTER JOIN table2 b 
ON a.id_to_join_on = b.id_to_join_on
于 2012-09-07T13:22:41.820 に答える
2

NikolaMarkovinovićが述べたように、where条件をjoin条件に移動する必要があります

ここであなたの選択は修正されました:

SELECT
   Recipes.recipeId,
   Recipes.userId,
   ---
   cookingInstructions 
FROM
   Recipes
   LEFT OUTER JOIN Codings ON
      Recipes.servingTypeId = Codings.codingKeyId AND
      Codings.languageId = @languageId
   LEFT OUTER JOIN Codings as Codings_2 ON 
      Recipes.categoryId = Codings_2.codingKeyId AND
      Codings_2.languageId = @languageId
   LEFT OUTER JOIN Codings as Codings_3 ON
      Recipes.continentId = Codings_3.codingKeyId AND
      Codings_3.languageId = @languageId
   LEFT OUTER JOIN CodingsAssociated ON
      Recipes.countryId = CodingsAssociated.codingKeyId AND
      CodingsAssociated.languageId = @languageId 
   LEFT OUTER JOIN Codings as Codings_4 ON
      Recipes.typeOfPreparationId = Codings_4.codingKeyId AND
      Codings_4.languageId = @languageId
   LEFT OUTER JOIN Codings as Codings_5 ON
      Recipes.flavourId = Codings_5.codingKeyId AND
      Codings_5.languageId = @languageId
   LEFT OUTER JOIN Codings as Codings_6 ON
      Recipes.preparationSkillId = Codings_6.codingKeyId AND
      Codings_6.languageId = @languageId
   LEFT OUTER JOIN Codings as Codings_7 ON
      Recipes.seasonId = Codings_7.codingKeyId AND
      Codings_7.languageId = @languageId
   LEFT OUTER JOIN RecipesTranslations ON
      Recipes.recipeId = RecipesTranslations.recipeId AND
      RecipesTranslations.languageId = @languageId
   LEFT OUTER JOIN Users ON
      Recipes.userId = Users.userId ;
于 2012-09-07T13:52:40.553 に答える