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
Форумы портала PHP.SU :: Версия для печати :: Независимая выборка из нескольких таблиц
Форумы портала PHP.SU » » Работа с СУБД » Независимая выборка из нескольких таблиц

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

1. LCarlo - 23 Августа, 2014 - 14:20:11 - перейти к сообщению
Существуют две таблицы, из которых необходимо вывести общие и независимые данные, т.е. таблица 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.
2. Мелкий - 23 Августа, 2014 - 14:39:31 - перейти к сообщению
Именно left join'ом и делается.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM t1 LEFT JOIN t2 ON (t1.sample = t2.sample_id)
3. LCarlo - 23 Августа, 2014 - 14:52:20 - перейти к сообщению
Мелкий пишет:
Именно left join'ом и делается.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM t1 LEFT JOIN t2 ON (t1.sample = t2.sample_id)

В этом то и проблема, что выберутся из таблицы t1 только те строки, которые найдены в t2, а нужно чтобы из t1 выбиралось даже когда в t2 нет нужных данных.
4. Мелкий - 23 Августа, 2014 - 15:02:16 - перейти к сообщению
Докажите это своим набором данных. Именно с этим запросом.
Можно сэкономить время, если сразу покажете свой запрос. Наверняка в where или having вы фильтруете по t2 без учёта null'ов.
5. LCarlo - 23 Августа, 2014 - 15:07:53 - перейти к сообщению
Мелкий пишет:
Докажите это своим набором данных. Именно с этим запросом.
Можно сэкономить время, если сразу покажете свой запрос. Наверняка в 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 может дублироватся
6. Мелкий - 23 Августа, 2014 - 15:43:10 - перейти к сообщению
LCarlo пишет:
мм, т.е. решением будет

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

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

И?

 

Powered by ExBB FM 1.0 RC1