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

Форум MySQL

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

 

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

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

тема: Вложенный запрос - сгруппировать данные по уникальному полю
 
 автор: mel_sasha   (10.01.2007 в 12:52)   письмо автору
 
 

Запрос с подзапросом
select d.*, (select ae_id from vac where av_id=avd_id_vac) from vac_del d
where avd_end_date<='2007-01-12' order by avd_id_vac

Нужно чтоыб в ответе не было одинаковх записей для поля ae_id
Команда DISTINCT не срабытывает для подзапроса

   
 
 автор: Trianon   (10.01.2007 в 13:03)   письмо автору
 
   для: mel_sasha   (10.01.2007 в 12:52)
 

что значит

d.*, (
?

   
 
 автор: cheops   (10.01.2007 в 13:37)   письмо автору
 
   для: Trianon   (10.01.2007 в 13:03)
 

Вывести все поля из таблицы d - MySQL-ские штучки...

   
 
 автор: Trianon   (10.01.2007 в 13:44)   письмо автору
 
   для: cheops   (10.01.2007 в 13:37)
 

По отдельности всё понятно
d.* - все поля таблицы по алиасу..
(SELECT) повторрная выборка из результатов запроса.
запятая - декартово произведение.

Но вот всё вместе - такая каша, которая, на мой взгляд, смысла не несет.

Хотя стоп. Запятая тут просто разделитель полей. Бум думать.

нет. Всё равно каша.

   
 
 автор: cheops   (10.01.2007 в 13:52)   письмо автору
 
   для: Trianon   (10.01.2007 в 13:44)
 

Здесь вложенный запрос выступает как скаляр, т.е. если вложенный запрос возвращает цифру 7, то запрос можно переписать так
select d.*, 7 from vac_del d 
where avd_end_date<='2007-01-12' order by avd_id_vac

   
 
 автор: Trianon   (10.01.2007 в 13:55)   письмо автору
 
   для: cheops   (10.01.2007 в 13:52)
 

Он вложенный или коррелированный?
Его исполнение зависит от основного или не зависит?

   
 
 автор: cheops   (10.01.2007 в 13:57)   письмо автору
 
   для: Trianon   (10.01.2007 в 13:55)
 

Самому интересно :)

   
 
 автор: cheops   (10.01.2007 в 13:39)   письмо автору
 
   для: mel_sasha   (10.01.2007 в 12:52)
 

ae_id из какой таблицы? avd_id_vac или d?

   
 
 автор: mel_sasha   (10.01.2007 в 13:47)   письмо автору
 
   для: cheops   (10.01.2007 в 13:39)
 

d.* - вывести все поля таблицы, где d - псевдоним таблицы vac_del
Короче есть две таблицы
vac_del и vac

мне нужно в одном запросе вывести часть данных с первой и второй таблицы
Если так будет понятно, то вот вариант без псевдонимов, к стати это не только MySQL-ские штучки, а обычный синтаксис скл
покрайней мере этот запрос работает и для сибейса

select vac_del.*, (select ae_id from vac where av_id=avd_id_vac) from vac_del
where avd_end_date<='2007-01-12' order by avd_id_vac

   
 
 автор: Trianon   (10.01.2007 в 13:51)   письмо автору
 
   для: mel_sasha   (10.01.2007 в 13:47)
 

Блин, ну почему нельзя написать по-человечески?

SELECT DISTINCT vac_del.*, v.ae_id  
FROM vac_del AS d LEFT JOIN vac AS v  ON v.av_id=d.avd_id_vac 
WHERE d.avd_end_date<='2007-01-12' order by d.avd_id_vac

   
 
 автор: mel_sasha   (10.01.2007 в 14:08)   письмо автору
 
   для: Trianon   (10.01.2007 в 13:51)
 

Пробовал, команда DISTINCT для запроса, склееного через LEFT JOIN тоже не срабатывает

   
 
 автор: Trianon   (10.01.2007 в 14:19)   письмо автору
 
   для: mel_sasha   (10.01.2007 в 14:08)
 

Она из-за left join не срабатывает или из-за d.* ?
Может руками нужные поля расписать?

   
 
 автор: cheops   (10.01.2007 в 13:55)   письмо автору
 
   для: mel_sasha   (10.01.2007 в 13:47)
 

Вообще вложенный запрос select ae_id from vac where av_id=avd_id_vac у вас очень странный - av_id и avd_id_vac из таблицы vac или вы хотите коррелированный запрос провести? Скорее всего в таком виде ничего не выйдет - коррелированный запрос нужно в WHERE-условии проводить, на худой конец в FROM.

   
 
 автор: mel_sasha   (11.01.2007 в 10:31)   письмо автору
 
   для: cheops   (10.01.2007 в 13:55)
 

Все отлично работает в таком виде, только нужно чтобы записи в ответе по полю ae_id не дублтровались.
Я конечно могу потом при обработке результата запроса отбрасывать ненужные записи, но так же не правильно..., да и себе интересно как можно решить такой вопрос...
а с первого взгляда- простой запросик ..

   
Rambler's Top100
вверх

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