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 :: Не работает SELECT из двух таблиц

 PHP.SU

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


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

> Без описания
Synov_son
Отправлено: 14 Ноября, 2014 - 13:21:10
Post Id


Частый гость


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


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




Доброго времени суток, подскажите, пожалуйста в чем ошибка или как правильней составить запрос:

Нужно выбрать много рядов с некоторыми значениями из одной таблицы и одним значением из другой таблицы.

Пример:

first_table

id| a | b | c
1 | a0 | b0| x
2 | a1 | b1| x

secod_table

id| d | e | f
1 | d0| e0 | f0

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT F.a, F.b, IF(EXISTS(SELECT S.d FROM `second_table` WHERE S.id = F.id), S.d, NULL) AS sd  
  2. FROM `first_table` AS F, `second_table` AS S
  3. WHERE F.c = x GROUP BY id ORDER BY sd LIMIT 0, 5


Получаю результат в виде
id| a | b | sd
1 | a0 | b0 | d0
2 | a1 | b1 | NULL

И вроде запрос работал, но тут я решил почистить вторую таблицу (удалил все строки) и теперь запрос ничего не возвращает, хотя я рассчитывал просто получать NULL от d колонки в случае если ряда с таким id не существует.

Первый раз писал такой запрос к двум таблицам, может чего напутал, помогите, пожалуйста.
 
 Top
Мелкий Супермодератор
Отправлено: 14 Ноября, 2014 - 13:34:29
Post Id



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


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


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




http://blog[dot]codinghorror[dot]com/a-v[dot][dot][dot]on-of-sql-joins/
Раз в одной из таблиц пусто, то inner join ожидаемо вернёт 0 строк.


-----
PostgreSQL DBA
 
 Top
Synov_son
Отправлено: 14 Ноября, 2014 - 13:43:34
Post Id


Частый гость


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


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




Мелкий пишет:
http://blog[dot]codinghorror[dot]com/a-v[dot][dot][dot]on-of-sql-joins/
Раз в одной из таблиц пусто, то inner join ожидаемо вернёт 0 строк.


Да но там не join.

Решил все через left join

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT F.a, F.b, S.d
  2. FROM `first_table` AS F
  3. LEFT JOIN `second_table` AS S ON S.id = F.id
  4. WHERE F.c = x
  5. ORDER BY S.d
  6. LIMIT 0, 5
 
 Top
Мелкий Супермодератор
Отправлено: 14 Ноября, 2014 - 14:05:09
Post Id



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


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


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




Synov_son пишет:
Да но там не join.

Да ну? То, что это устаревший синтаксис, не означает что это не inner join.


-----
PostgreSQL DBA
 
 Top
Synov_son
Отправлено: 14 Ноября, 2014 - 14:12:06
Post Id


Частый гость


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


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




Мелкий пишет:
Synov_son пишет:
Да но там не join.

Да ну? То, что это устаревший синтаксис, не означает что это не inner join.


А можно было не язвить, а сказать это в первом сообщении. Не писал бы я вопрос, зная все эти нюансы.
 
 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