0

私は次の声明を持っています

SELECT di_id, 
       di_name, 
       di_location, 
       ig_name, 
       in_latitude, 
       in_longitude
FROM dam_info
LEFT JOIN instrument_group 
       ON ig_diid = di_id
LEFT JOIN instruments 
       ON in_igid = ig_id;

次のように結果を返しました

di_id  di_name        di_location           ig_name                 in_latitude   in_longitude
13     Macap          "Kluang, Johor"       "Standpipe Piezometer"  1.890895      103.266853
13     Macap          "Kluang, Johor"       "Standpipe Piezometer"  1.888353      103.267067
1      "Timah Tasoh"  "Kangar, Perlis"      NULL                    NULL          NULL
2      "Padang Saga"  "Langkawi, Kedah"     NULL                    NULL          NULL
3      "Bukit Kwong"  "Pasir Mas, Kelantan" NULL                    NULL          NULL
4      "Bukit Merah"  "Kerian, Perak"       NULL                    NULL          NULL
5      Gopeng         "Gopeng, Perak"       NULL                    NULL          NULL
6      Repas          "Bentong, Pahang"     NULL                    NULL          NULL
7      Batu           "Gombak, Selangor"    NULL                    NULL          NULL
8      Pontian        "Rompin, Pahang"      NULL                    NULL          NULL
9      "Anak Endau"   "Rompin, Pahang"      NULL                    NULL          NULL
10     Labong         "Mersing, Johor"      NULL                    NULL          NULL
11     Bekok          "Batu Pahat, Johor"   NULL                    NULL          NULL
12     Sembrong       "Batu Pahat, Johor"   NULL                    NULL          NULL
14     Perting        "Bentong, Pahang"     NULL                    NULL          NULL
15     Beris          "Sik, Kedah"          NULL                    NULL          NULL

結果からわかるように、繰り返し行があり、そのうちの 1 つを削除したいのですが、table楽器に返される行がさらにある場合は、1 つだけが必要です。

それを達成するための正しい声明は何ですか?

前もって感謝します

4

3 に答える 3

2

group by 句を使用することもできます。

SELECT di_id, 
       di_name, 
       di_location, 
       ig_name, 
       in_latitude, 
       in_longitude 
FROM   dam_info 
       LEFT JOIN instrument_group 
              ON ig_diid = di_id 
       LEFT JOIN instruments 
              ON in_igid = ig_id 
GROUP  BY di_id; 
于 2014-02-26T08:06:20.707 に答える
1

select キーワードの後に​​キーワード DISTINCT を追加してみてください。

SELECT DISTINCT di_id, 
                di_name, 
                di_location, 
                ig_name, 
                in_latitude, 
                in_longitude 
FROM   dam_info 
       LEFT JOIN instrument_group 
              ON ig_diid = di_id 
       LEFT JOIN instruments 
              ON in_igid = ig_id; 
于 2014-02-26T06:03:13.177 に答える
1

あなたのスキーマを見ると、「instrument_group」というフレーズが示唆するように、1 つdi_idに複数の楽器が含まれている、つまりinstrumentsテーブルには ごとに複数のレコードが含まれているように思われます。in_igid

有意義なことの 1 つは、インストゥルメントのバウンディング ボックスを返すことです。

SELECT di_id, di_name, di_location, ig_name,
    MIN(in_latitude) as min_latitude,
    MAX(in_latitude) as max_latitude,
    MIN(in_longitude) as min_longitude,
    MAX(in_longitude) as max_longitude
FROM dam_info
left join instrument_group on ig_diid = di_id
left join instruments on in_igid = ig_id
GROUP BY di_id, di_name, di_location, ig_name;
于 2014-02-26T08:14:39.077 に答える