1

クエリが他の値とともに null 値も返すようにする方法に興味があります。


更新: 次のクエリは、場所 ID、訪問日、訪問時間、各訪問のバス名を含むテーブルを出力することになっています。以下のクエリは出力を提供しますが、下の表のように null は含まれません。結果には null も含まれる必要があります。

全部で 3 つのテーブルがあります: Location1、バス & 訪問。だから私はこの(以下の)クエリを使用してIDを抽出し、すべてのテーブルを結合しています。このクエリは、フロリダへの訪問のみを検索します。


たとえば、次のクエリを使用します。

SELECT LOC.LOC_ID, VISIT.VISIT_DATE, VISIT.VISIT_TIME, BUS.BUS_NAME 
FROM BUS, LOCATION1, VISIT
WHERE VISIT.BUS_ID = BUS.BUS_ID 
AND VISIT.LOC_ID = LOCATION1.LOC_ID 
AND BUS.BUS_NAME IN (
SELECT BUS_NAME 
FROM BUS 
WHERE BUS_ID IN (
SELECT BUS_ID 
FROM VISIT 
WHERE LOC_ID IN (
SELECT LOC_ID 
FROM LOCATION1 
WHERE LOC_NAME='Florida')));

まだバスが割り当てられていない訪問があり、一部の値が であるとしますnull

INしたがって、演算子を使用すると一連の値が返されますが、値は返されないと私は信じていnullます。exists代わりに使用するとどうなりますか?

テーブルは次のようになります。

 Loc_name   Loc_id         visit_date          visit_time              bus_name
  Florida     1            26-mar-2009           2:00pm                  xyz
  Florida     3            29-jul-2010           3:00pm                  abc
  Florida     8            22-may-2013           2:50pm                  (null)
  .
  .
  .

誰かがこれで私を助けてくれることを願っています。

ありがとう

更新 2:

答えを見つけた!

SELECT LOC.LOC_ID, VISIT.VISIT_DATE, VISIT.VISIT_TIME, BUS.BUS_NAME 
FROM LOCATION1
LEFT JOIN VISIT ON LLOCATION1.LOC_ID = VISIT.LOC_ID 
LEFT JOIN BUS ON BUS.BUS_ID = VISIT.BUS_ID
WHERE LOC_NAME = 'Florida';

再度、感謝します!

4

2 に答える 2

1

あなたの質問/クエリを正しく理解していれば、非常に単純化できると思います(なぜすべてのINステートメントを使用しているのかわかりません)。OUTER JOINを使用して、目的の結果を取得してみてください。

SELECT LOC.LOC_ID, VISIT.VISIT_DATE, VISIT.VISIT_TIME, BUS.BUS_NAME 
FROM LOCATION1 LOC
    LEFT JOIN VISIT ON LOC.LOC_ID = VISIT.LOC_ID
    LEFT JOIN BUS ON VISIT.BUS_ID = BUS.BUS_ID 
WHERE LOC.LOC_NAME='Florida'
于 2013-05-22T20:01:07.703 に答える
0
SELECT LOC.LOC_ID, VISIT.VISIT_DATE, VISIT.VISIT_TIME, BUS.BUS_NAME 
FROM BUS, LOCATION1, VISIT
WHERE VISIT.BUS_ID = BUS.BUS_ID(+) 
AND VISIT.LOC_ID = LOCATION1.LOC_ID(+)
AND (BUS.BUS_NAME IN (
SELECT BUS_NAME 
FROM BUS 
WHERE BUS_ID IN (
SELECT BUS_ID 
FROM VISIT 
WHERE LOC_ID IN (
SELECT LOC_ID 
FROM LOCATION1 
WHERE LOC_NAME='Florida'))) OR Bus.Bus_name is null);

(+) 表記の目的である完全結合ではなく、外部結合を行う必要があります。さらに、bus.Bus_name が null になる可能性がある場所を処理する必要があります。

この例で (+) がどこに行くのかはわかりませんが、visit.bus と bus.bus が関連付けられているときと、visit.loc と場所が関連付けられているときの関係を理解する必要があります。

こちらの方が読みやすいと思いますが、

SELECT LOC.LOC_ID, VISIT.VISIT_DATE, VISIT.VISIT_TIME, BUS.BUS_NAME 
FROM Location1 Loc
LEFT JOIN VISIT on Loc1.Loc_ID = Visit.Loc_ID and Loc_Name = 'Florida'
LEFT JOIN BUS on Bus.Bus_ID = Visit.Bus_ID
于 2013-05-22T19:57:49.520 に答える