1

私はかなり2つのテーブルを持っています:

SELECT * FROM clubs_place_rubrics;
  id   | place_id | placerubric_id 
-------+----------+----------------
 20777 |     3626 |              7
(1 row)

SELECT * FROM clubs_placerubric LIMIT 5;
 id |         rubric         
----+------------------------
  1 | Тренажёрные залы
  2 | Фитнес-клубы
  3 | Косметические услуги
  4 | Услуги массажиста
  5 | Ледовые дворцы / Катки

そのため、ルーブリックがある、またはまったくないクラブがいくつかあります。上記の例から、1 つのクラブ (id=3626) だけがルーブリック #7 を持っています。

では、なぜこのコードは複数の null のリストを返すのでしょうか?

        SELECT
            place.id, place.title, 
            array_agg(phone.code) phone_code, 
            array_agg(phone.phone) phone_number, 
            array_agg(phone.fax) fax,
            array_agg(email.email) email, 
            array_agg(site.site) site,
            array_agg(rubric.rubric) rubrics
        FROM clubs_place place 
            LEFT OUTER JOIN clubs_placephone phone 
            ON place.id = phone.place_id 
            LEFT OUTER JOIN clubs_placeemail email
            ON place.id = email.place_id 
            LEFT OUTER JOIN clubs_placesite site
            ON place.id = site.place_id 
                LEFT OUTER JOIN clubs_place_rubrics rubrics
                ON place.id = rubrics.place_id
                LEFT OUTER JOIN clubs_placerubric rubric
                ON rubric.id = rubrics.placerubric_id

        WHERE project='Москва'
        GROUP BY place.id
        LIMIT 6;


-[ RECORD 4 ]+-----------------------------------------------------------------------
id           | 3629
title        | Переделкино, банно-оздоровительный комплекс
phone_code   | {499,495}
phone_number | {7379358,7311313}
fax          | {t,t}
email        | {gup@gup-bok.ru,gup@gup-bok.ru}
site         | {www.gup-bok.ru,www.gup-bok.ru}
rubrics      | {NULL,NULL}
-[ RECORD 5 ]+-----------------------------------------------------------------------
id           | 3630
title        | Досуг и здоровье, физкультурно-оздоровительный комплекс
phone_code   | {499}
phone_number | {1281877}
fax          | {f}
email        | {""}
site         | {www.apollon.ru}
rubrics      | {NULL}
-[ RECORD 6 ]+-----------------------------------------------------------------------
id           | 3631
title        | Центр Корона, спортивно-развлекательный центр
phone_code   | {495,495,495}
phone_number | {7532650,7540511,7941880}
fax          | {f,f,f}
email        | {centr-corona@yandex.ru,centr-corona@yandex.ru,centr-corona@yandex.ru}
site         | {"","",""}
rubrics      | {NULL,NULL,NULL}

ルーブリックの数は電話の数と同じようです。しかし、論理はありません。私は、SQL 構文で間違いを犯したと思います。

間違いなく、ルーブリックの結果のリストに複数の null があってはなりません。サイト、電子メール、および値を持たない他のすべての行についても同じです。

これを修正する方法は?

ありがとう。

4

1 に答える 1

0

これらのテーブルのいずれかに複数のエントリがある場合:

LEFT OUTER JOIN clubs_placephone phone 
ON place.id = phone.place_id 
LEFT OUTER JOIN clubs_placeemail email
ON place.id = email.place_id 
LEFT OUTER JOIN clubs_placesite site
ON place.id = site.place_id 

複数の場所レコードがあり、

LEFT OUTER JOIN clubs_place_rubrics rubrics
ON place.id = rubrics.place_id

複数回参加すると参加します。集計すると、それらの複数の行の NULL が集計に表示されます。

clubs_placephone、clubs_placeemail、clubs_placesite のいずれかで place_id が重複していないことを確認していただけますか?

重複がある場合は、重複を避けるためにサブクエリを使用してそれらの結合を 1 対 1 にすることをお勧めします。

于 2016-01-30T00:04:03.380 に答える