Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: LEFT JOIN объединение таблиц
 
 автор: duke   (13.07.2004 в 21:32)
 
 

Никак не пойму в чем дело. Во всех мануалах написано, что такая конструкция
Select * table1 LEFT JOIN table2 ON table1.id=table2.id будет возвращать все записи из table1 и соответствующие записи из table2 и в ТОМ ЧИСЛЕ "фиктивные" записи из table2, для которых нет соответсвия в первой таблице, но значения полей тогда будет приравнено к NULL.
Но не работает. Может быть дело в версии MySQL или в том, что я на винде это пробую. Подскажите, пожалуйста.

   
 
 автор: cheops   (13.07.2004 в 23:31)   письмо автору
 
   для: duke   (13.07.2004 в 21:32)
 

Смущает вот что... здесь помоему пропущен оператор FROM между table1 и LEFT... Точно этот SQL-запрос работает, а не вылетает с синтаксической ошибкой?

   
 
 автор: Duke   (13.07.2004 в 23:48)
 
   для: cheops   (13.07.2004 в 23:31)
 

Да, извиняюсь, FROM я пропустил. Вот реальный запрос.


SELECT * FROM routes LEFT outer JOIN schedule ON routes.id_route = schedule.id_route  where id_train=".$row['id_train'].

   
 
 автор: glsv (Дизайнер)   (14.07.2004 в 00:24)   письмо автору
 
   для: Duke   (13.07.2004 в 23:48)
 

А что у Вас условие Where делает?
Допустим, были выбраны все записи из routes и нулевые поля из schedule (если они есть), а условие Where после этого взяло и отрезало нужные Вам записи? Как будто их и не было.
Не там такого противоречия? Попробуйте без условия провести эксперимент.

   
 
 автор: Duke   (15.07.2004 в 02:52)
 
   для: glsv (Дизайнер)   (14.07.2004 в 00:24)
 

Большое спасибо, да не работало из - за условия в конце. Запрос теперь правда другой придумывать надо, но хотя бы голову больше не ломаю - отчего не работает :)

   
 
 автор: ВК   (15.07.2004 в 18:15)
 
   для: glsv (Дизайнер)   (14.07.2004 в 00:24)
 

Дорогие коллеги! В первую очередь выражаю вам огромную признательность за ваш труд, - к сожалению, не так много людей, понимающих, что кроме того, чтобы брать и хапать, надо еще отдавать. Хочу также сделать искреннее признание в высоком профессионализме cheops'у и Кузнецову М.В. Кстати, Максим Валерьич, у меня есть подозрение, что мы с тобой уже однажды пересекались :) Должен также сказать, что первый раз вижу Дизайнера, разбирающегося в СУБД, это нонсенс по нынешним меркам :)
Я программист с 20 летним стажем, но ранее никогда не работал под Web и, увы, обошли меня стороной и базы данных (специфика работы: приходилось все делать на файлах). Но - вот пришлось изучать и достаточно в быстром темпе, поэтому не откажите в помощи. Скажу честно - дается не просто. У меня к вам два вопроса, и, насколько, я понимаю, оба имеют отношение к обсуждаемому в этой теме вопросу.
1. У меня есть БД по сотрудникам, которые работают в трех фирмах. Как правило, каждый из сотрудников работает или в двух или в трех фирмах. И мне нужно вывести всех сотрудников, которые работают одновременно в трех фирмах.
2. Работает ли в MySQL внешнее объединение? Т.е. могу ли я написать, к примеру, WHERE employee *= office?

   
 
 автор: cheops   (15.07.2004 в 18:52)   письмо автору
 
   для: ВК   (15.07.2004 в 18:15)
 

Спасибо на добром слове :)
Насколько мне известно в текущей версии MySQL внешние объединения не поддерживаются. Это очень примитивная база данных - пока нет даже вложенных запросов :( Единственное её достоинство - скрость, бесплатность и простота освоения. Кстати, на сайте MySQL есть русский мануал, в котором можно точно посмотреть что в ней есть - только он не очень удобен в навигации...

PS Если структура базы не секретна :) можно было бы вместе подумать над наиболее оптимальным решением задачи.

   
 
 автор: ВК   (15.07.2004 в 20:44)
 
   для: cheops   (15.07.2004 в 18:52)
 

Да все просто в смысле структуры: три таблицы, в каждой ФИО. И задача - выбрать тех, которые (а) работают в двух фирмах и (б) в трех.

   
 
 автор: cheops   (15.07.2004 в 22:14)   письмо автору
 
   для: ВК   (15.07.2004 в 20:44)
 

Может просто написать многотабличный запрос, если таблицы небольшие, много времени они не займут:

-- Для сотрудников, работающих в трёх фирмах
SELECT employee FROM first, second, third
WHERE first.employee = second.employee 
AND second.employee = third.employee;
-- Для сотрудников, работающих в двух фирмах
SELECT employee FROM first, second, third
WHERE first.employee = second.employee 
OR second.employee = third.employee
OR first.employee = third.employee;

   
 
 автор: Кузнецов М.В.   (15.07.2004 в 19:20)   письмо автору
 
   для: ВК   (15.07.2004 в 18:15)
 

Спасибо за хорошие слова в наш адрес. Дизайнер у нас действительно уникум :)
>Кстати,Максим Валерьич, у меня есть подозрение, что мы с тобой уже однажды пересекались :)
Вполне возможно :)

   
 
 автор: ВК   (15.07.2004 в 20:45)
 
   для: Кузнецов М.В.   (15.07.2004 в 19:20)
 

выслал письмо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования