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 :: Независимая выборка из нескольких таблиц

 PHP.SU

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


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

> Без описания
LCarlo
Отправлено: 23 Августа, 2014 - 14:20:11
Post Id



Новичок


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


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




Существуют две таблицы, из которых необходимо вывести общие и независимые данные, т.е. таблица t1 -основная и данные из нее должны показываться в любом случае (если они есть), а из таблицы t2 выводятся только те данные, которые подпадают под условия (t1.sample = t2.sample_id) в рамках одного запроса, что пока никак не выходит.

Первая:
t1:
id title sample

t2:
sample_id aviable


если связивать через LEFT JOIN ON (t1.sample = t2.sample_id) то будут показаны только результаты, которые есть в обеих таблицах, необходимо же показывать данные из первой таблицы (t1), а из второй (t2) только если они есть.

Если кратко - делать выборку из t1 независимо от того, если результат в t2.

(Отредактировано автором: 23 Августа, 2014 - 14:21:08)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Августа, 2014 - 14:39:31
Post Id



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


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


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




Именно left join'ом и делается.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM t1 LEFT JOIN t2 ON (t1.sample = t2.sample_id)


-----
PostgreSQL DBA
 
 Top
LCarlo
Отправлено: 23 Августа, 2014 - 14:52:20
Post Id



Новичок


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


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




Мелкий пишет:
Именно left join'ом и делается.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM t1 LEFT JOIN t2 ON (t1.sample = t2.sample_id)

В этом то и проблема, что выберутся из таблицы t1 только те строки, которые найдены в t2, а нужно чтобы из t1 выбиралось даже когда в t2 нет нужных данных.

(Отредактировано автором: 23 Августа, 2014 - 14:53:48)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Августа, 2014 - 15:02:16
Post Id



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


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


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




Докажите это своим набором данных. Именно с этим запросом.
Можно сэкономить время, если сразу покажете свой запрос. Наверняка в where или having вы фильтруете по t2 без учёта null'ов.


-----
PostgreSQL DBA
 
 Top
LCarlo
Отправлено: 23 Августа, 2014 - 15:07:53
Post Id



Новичок


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


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




Мелкий пишет:
Докажите это своим набором данных. Именно с этим запросом.
Можно сэкономить время, если сразу покажете свой запрос. Наверняка в where или having вы фильтруете по t2 без учёта null'ов.

мм, т.е. решением будет
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE (мои условия) AND (t2.sample_id = NULL OR t2.sample_id <> NULL)
?

PS: был уверен, что JOIN отсеет то, что не проходит через ON. Право, надо учить матчасть...
Огромное Спасибо, что уделили время.

Прошу прощения, есть ВАЖНАЯ деталь:
если в t1 sample unique, то в t2 sample_id может дублироватся

(Отредактировано автором: 23 Августа, 2014 - 15:36:27)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Августа, 2014 - 15:43:10
Post Id



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


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


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




LCarlo пишет:
мм, т.е. решением будет

Т.е. причиной будет, если в "мои условия" вы фильтруете t2, не учитывая, что там может быть null.

LCarlo пишет:
Прошу прощения, есть ВАЖНАЯ деталь:
если в t1 sample unique, то в t2 sample_id может дублироватся

И?


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB