次の方法でいくつかのデータを選択しようとしています。
SELECT column
FROM table
WHERE a = a1
AND (b = b1 OR b = b2 OR b = b3);
私がやりたいのは、bがb1と等しくない場合、b=b2かどうかを確認することです。ただし、b = b1の場合は、他の条件をチェックしないでください。このselectステートメントの結果は、1つのエントリーのみでなければなりません。ただし、私が持っていないステートメントでは、3つの条件すべてをチェックし、複数の行を返す場合があります。繰り返しになりますが、条件が真であるかどうかのチェックを停止したいと思います。
これをどのように実装できるかについてのアイデアはありますか?ケースを試しましたが、うまくいきませんでした...
前もって感謝します!
編集これは私が実行しようとしている実際のクエリです。
INSERT INTO shipment_flights
(airlinename, flt_no, flt_date, destination, phone, depttime, arrivaltime, pcs, weight)
SELECT st.airlinename, flightno, flightdate, destination,
(SELECT phone
FROM carrierlocations
WHERE carriers_carrierid = (select carrierid from carriers where airlinename = st.airlinename)
AND (city = destination OR (city != destination AND
city = (SELECT city FROM airports WHERE iataid =
(SELECT airports_iataid FROM ratelegs
WHERE shipments_shipid = c.shipments_shipid))
))) phone,
depttime, arrivaltime, sum(linepcs), sum(lineweight)
FROM segment_times st
JOIN contents2flights c2f
ON st.flightid = c2f.segments_flights_flightid
AND st.segmentid = c2f.segments_segmentid
JOIN contents c
ON c.lineno = c2f.contents_lineno
AND c.shipments_shipid = c2f.contents_shipments_shipid
WHERE c.shipments_shipid = var_shipid
GROUP BY flightid
ORDER BY flightdate, depttime;
出力例は次のとおりです。
airlinename flt_no flt_date destination phone pcs weight
Everts Air Alaska CH1 2008-02-20 Hughes 9074502351 24 2121
クエリは、フライトデータの束を一時テーブルに挿入します。私が問題を抱えているのは、場所の電話番号を取得することです。この部分は次のとおりです。
(SELECT phone
FROM carrierlocations
WHERE carriers_carrierid = (select carrierid from carriers where airlinename = st.airlinename)
AND (city = destination OR (city != destination AND
city = (SELECT city FROM airports WHERE iataid =
(SELECT airports_iataid FROM ratelegs
WHERE shipments_shipid = c.shipments_shipid))))) phone
Amit Bhargavaがアドバイスしたクエリでは、一時テーブルに1つの行がある場合にのみ、正しい結果が得られます。それ以上ある場合は、電話部分の選択でエラーが発生します。
「エラーコード:1242。サブクエリが複数の行を返します」