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

正如您从结果中看到的那样,有重复的行,我想消除其中的一个,如果table仪器有更多行要返回,那么我只想要一个。

实现这一目标的正确说法是什么?

提前致谢

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

查看您的架构,在我看来,一个di_id包含多个仪器是故意的,即instruments表包含每个 的多个记录in_igid,正如短语“instrument_group”所暗示的那样。

您可以做的一件有意义的事情是返回仪器的边界框:

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 回答