0

要件

「コミューター」タイプと「ノーマル」タイプの飛行機でフライトを実施したすべてのパイロット (従業員 ID と名前) を検索して表示します。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

1st image is Plane_new table
2nd image is FlightI_new table
3rd image is Employee_new table

解決

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype = 'Commuter' AND plane_new.ptype = 'Normal';

コードはORで機能しますが、何らかの理由で AND を使用すると、「行が返されません」となります。

それを解決する方法はありますか?

4

2 に答える 2

1

レコードが同じレコードにAND両方を持つことはできないため、あなたは機能しません。ptypeしかし、次のようなものを使用できるはずです。

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new 
    ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype IN ('Commuter', 'Normal')
GROUP BY flightI_new.eid, employee_new.ename
HAVING count(distinct plane_new.ptype) = 2;

デモで SQL Fiddle を参照してください

次のようなものを使用できます。

SELECT distinct flightI_new."eid", employee_new."name"
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new."eid" = employee_new."eid"
INNER JOIN plane_new 
    ON flightI_new."pnum" = plane_new."pnum"
WHERE plane_new."ptype" = 'commuter'
  AND flightI_new."eid" IN (select flightI_new."eid"
                            FROM flightI_new
                            INNER JOIN employee_new 
                                ON flightI_new."eid" = employee_new."eid"
                            INNER JOIN plane_new 
                                ON flightI_new."pnum" = plane_new."pnum"
                            WHERE plane_new."ptype" = 'normal')

デモで SQL Fiddle を参照してください

于 2012-11-19T18:46:29.877 に答える
0

間違いはここにある

      WHERE plane_new.ptype = 'Commuter' AND plane_new.ptype = 'Normal';

plane_new.ptype は、データベースにコンピューターと通常の 2 つを含めることはできません。行が返されない理由は、そのうちの 1 つでなければなりません。だから多分あなたは何か他のことを意味します。ここでは、WHERE ステートメントでのみ使用できますOR。返される行はcomputernormal

于 2012-11-19T19:17:18.263 に答える