2017-10-26 12 views
-1

私はこのようになりますチャート持って想像: Animals tables単純なSQL Serverクエリ

をそして、私はそれがその寿命大きい表食品、上に表示されていない場合、クエリは、動物の大きさを示したいと思います17よりも、その大陸アフリカ

私は食品表に含まれていない動物を探して除き、コマンドの使用方法については、このように考えていたです。

また
SELECT name from Favorite except name from Food; 

、他の二つの条件のため、私はこの通信を書いた:

SELECT size from Favorite when lifespan>='17' and continent='Africa'; 

しかし、どのコマンドを正しく結合する必要があるかはわかりません。

答えて

2

LEFT JOINを使用すると、食物表にない動物を見つけることができます。以下試してみてください:

SELECT a.name, a.size 
FROM Favorite a 
LEFT JOIN Food f ON a.Name = f.Name 
WHERE f.name IS NULL 
AND a.lifeSpan>=17 
AND a.continent = 'Africa' 
2
select name 
from favorite 
    where not exists(select name 
         from food 
         where food.name = favorite.name) 
      and lifespan >= 19 
      and continent = 'Africa' 
0

寿命が数値フィールドの場合は、SQL Serverは、数値に文字列からの暗黙的な変換を行う必要がないように、引用符を除外する方が効率的です。あなたはその寿命17よりも大きいですが、あなたの例では、あなたが(または 17に等しいよりすなわち大きい)lifespan>='17'を書いた動物を見せたかっ述べたので、あなたは後者をしたいと仮定すると:

SELECT Favorite.Name, Size 
FROM Favorite LEFT JOIN Food 
ON  Favorite.Name = Food.Name 
WHERE Food.Name IS NULL 
AND LifeSpan >= 17 
AND Continent = 'Africa' 

LEFTが意志を登録しよう最初はFavoriteテーブルからすべてのレコードを取得し、Foodテーブルに一致するレコードを持たないレコードは、すべてのFoodフィールドに対してNULL値を返します。 WHERE句は、結果をに限定することを指定します。フード名がNULLのもののみです。 (ただし、Foodテーブルのフィールドは参照されている可能性がありますが、JOINの一部であるフィールドを使用するのが一般的です)