Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: LEFT JOIN in PostgreSql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Panoptik
Отправлено: 10 Сентября, 2013 - 11:51:18
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




приветвтую

есть структура таблиц
CODE (htmlphp):
скопировать код в буфер обмена
  1. user
  2. id - pk
  3. email - varchar
  4. и другие неважные поля


CODE (htmlphp):
скопировать код в буфер обмена
  1. mobi_project_followers
  2. userId - fk к user.id
  3. projectId - fk к project.id в данном случае не участвует в выборке
  4. составной первичный ключ


CODE (htmlphp):
скопировать код в буфер обмена
  1. mobi_project_response
  2. id - pk
  3. title
  4. и другие неважные поля


нужно в одном запросе посчитать количество строк с первой и второй таблицы которые подпадают в условие join

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT pf."projectId", pr."id", u.*
  2.                 FROM "user" u
  3.                 LEFT JOIN "mobi_project_followers" pf
  4.                     ON pf."userId" = u."id"
  5.                 LEFT JOIN "mobi_project_response" pr
  6.                     ON pr."userId" = u."id"
  7.                 WHERE u."id" = 1
  8.  



в mySql значения строк несуществующей записи заполнялись значением NULL и тогда в условии можно было добавить WHERE col IS NOT NULL

но postgreSql почему-то заполняет все значения таблиц в не зависимости от типа join

и я в результате получаю умноженный результат из выборки по двум таблицам

подскажите кто знает особенности postgre как выбрать требуемый результат?


-----
Just do it
 
 Top
caballero
Отправлено: 10 Сентября, 2013 - 12:05:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
в mySql значения строк несуществующей записи заполнялись значением NULL и тогда в условии можно было добавить WHERE col IS NOT NULL

вообще то в таком случае делается обычный join а не left join с отсеканием null

Цитата:
подскажите кто знает особенности postgre

left join - стандартный синтаксис, нету там никаких особенностей.
напиши запрос по человечески и проверь данные


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Panoptik
Отправлено: 10 Сентября, 2013 - 12:09:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




обычный join дает тот же результат

вот пример
для запроса
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT u."id", pr."id" pr_id, pf."projectId" pf_id
  2.                 FROM "user" u
  3.                 JOIN "mobi_project_followers" pf
  4.                     ON pf."userId" = u."id"
  5.                 JOIN "mobi_project_response" pr
  6.                     ON pr."userId" = u."id"
  7.                 WHERE u."id" = 1

[img]https://dl.dropboxusercontent.com/u/105789475/pg_query.png[/img]

(Отредактировано автором: 10 Сентября, 2013 - 12:10:11)



-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 10 Сентября, 2013 - 12:20:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Так как folowers к response относится? Вот и получается декартово произведение этой пары таблиц. Разве нет?


-----
PostgreSQL DBA
 
 Top
Panoptik
Отправлено: 10 Сентября, 2013 - 12:22:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




они никак не относятся ...

мне нужно просто знать количество тех и иных.

решается ли этот вопрос на стороне sql?


-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 10 Сентября, 2013 - 12:33:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Решается, разумеется.
union
подзапрос в селекте
count distinct
join подзапроса
CTE
2 запроса (гораздо лучше в одной транзакции)
Ещё чего-нибудь, что забыл.


-----
PostgreSQL DBA
 
 Top
Panoptik
Отправлено: 10 Сентября, 2013 - 12:41:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




Пока спасибо за советы. Как попробую отпишусь о решении


-----
Just do it
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB