2017-03-29 1 views
-1

私はちょっとした問題を抱えています。私は正しい答えを見つけることができません。SQL:ベジタリアンを選んで

私は複数のテーブルを持つDBを持っており、そこには動物とその食品があります。私はどの動物がベジタリアンの食事だけを食べるかを選択する必要があります。テーブルはBOOLEANで設定されています。 0 =肉1 =野菜。

テーブルには、肉と野菜を食べる動物がいます。私はそれらを必要としません、私は厳密にVEGETARIANだけを食べる動物が必要です。

ありがとうございます。

+0

MEAT用とVEGETARIAN用の2つの列を使用することをお勧めします。 – Kevin

+0

2つのテーブルはどのように接続されていますか?いくつかのサンプルデータを提供できますか/ –

+0

テーブル定義とサンプルデータを共有してください –

答えて

0

あなたはこれを試すことができます(ただし、あなたが何かを書いていないので、それは、唯一モクです):

SELECT * 
FROM ANIMALS A 
INNER JOIN BR_ANIMALS_FOOD B ON A.ID = B.ID_ANI 
INNER JOIN FOODS C ON B.ID_FOODS = C.ID 
WHERE NOT EXISTS (SELECT 1 FROM FOODS D WHERE B.ID_FOODS = D.ID AND D.FOOD_TYPE = 0) 
AND C.FOOD_TYPE = 1 
2

あなたはあなたのテーブルのスキーマは何か言いませんでしたので、私はフィールドを持つシンプルなものを作成します。 AnimalId int、肉ビット。

は、テーブル内のレコードは、そう動物1肉、野菜、動物NR 2のみ野菜、動物NR 3のみ肉の両方を食べていること

+----------+------+ 
| AnimalId | meat | 
+----------+------+ 
|  1 | 0 | 
|  1 | 1 | 
|  2 | 0 | 
|  3 | 1 | 
|  4 | 0 | 
+----------+------+ 

として単純として記憶されます。私たちの期待する結果はAnimal ID 2と4だけです。

AnimalIdでデータをグループ化する必要があります.Mintビット列をintにキャストしてからMAXをとり、MAXの結果として0のデータをフィルタリングする必要があります。

SELECT  AnimalId 
FROM   dbo.Animals 
GROUP BY AnimalId 
HAVING  (MAX(CAST(Meat AS INT)) = 0)