-2

Staffテーブル

ID Name   Gender
1  John   Male
2  Adam   Male
3  Joella Female

Foodテーブル

ID StaffID Name
1  1       Eggs
2  1       Bacon
3  1       Toast
4  2       Eggs
5  2       Bacon
6  3       Toast

卵とトーストの両方を食べた男性スタッフの名前が必要です.
答えは John のはずですが、AND 句を使用するたびに、同じ「行フィールド」を見ているため、結果はゼロになります。OR を使用すると、誤った結果が返されます。

左結合、標準結合、その他いくつか試してみました。

SELECT field from table left join table2 on table.field=table2.field 
where field ='eggs' && field = 'toast' && gender = 'male'

これの秘訣は、これを単一のクエリで実行しようとしていることです。

4

5 に答える 5

3

fieldと同時にはできないのでeggstoast同じテーブルで再度結合してください

SELECT field from table left join table2 ON table.field = table2.field
left join table2 table22 ON table.field = table22.field
WHERE table2.field = 'eggs' AND table22.field = 'toast' && gender = 'male'

また、「フィールド」に参加したくないと確信していますがON、staffID などの他の列に参加したいと考えています。

于 2013-10-21T21:01:12.137 に答える
2

スタッフ メンバーごとにグループ化し、結果のグループをフィルター処理して、目的の基準を満たすグループを探します。

SELECT   Staff.Name
FROM     Staff JOIN Food ON Food.StaffID = Staff.ID
WHERE    Food.Name IN ('Eggs', 'Toast')
     AND Staff.Gender = 'Male'
GROUP BY Staff.ID
HAVING   COUNT(Food.ID) = 2
于 2013-10-21T21:02:26.497 に答える
2
SELECT name, count(Food.id) AS foodcount
FROM Staff
LEFT JOIN Food ON Staff.id = Food.StaffID
WHERE Food.Name IN ('eggs', 'toast') AND gender = 'male'
GROUP BY Staff.id
HAVING foodcount = 2;
于 2013-10-21T21:02:53.123 に答える
1

JOIN構文、または構文INを使用できます

SELECT name from staf
where
ID in (select StaffId from food where Name='egg') and
ID in (select StaffId from food where Name='toast') and
gender = 'male'
于 2013-10-21T21:03:59.373 に答える