Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> select и количество записей с другой таблицы? 
V
    Опции темы
Wwolf
Дата 31.3.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



Существует три таблицы:
Код

Table1                    Table2                 Table3
-------------              ------------------        -----------
|  id  |  a  |              |  idt  | fio      |       |  idtt   |
-------------              ------------------        -----------
|  1   |  a   |             |  1    |  A      |      |     1    |
|  2   |  b   |             |  2    |  M      |      |     2    |
|  3   |  c   |             |   1    |  B      |      |     3    |
|  4   |  d   |             |  3    |  M      |      |     2    |
|  5   |  e   |             |  1    |  C      |      |     4    |


не получается подсчитать количество записей c Table3 
по условию: 
Тable2.fio    =  'M'
Table2.idt   =   Table1.id
Таble3.idtt  =   Table1.id

Результат должен был быть:
Код

---------------
|  a   |   c    |
---------------
   b    |    2
   c     |    1

Такой вот запрос не работает: smile 
Код

SELECT   Table1.a  AS  a,
               count(Table3.idtt)  AS  c 
    FROM   Table1, Table2, Table3
    WHERE        Тable2.fio    =  'M'
                 and Table2.idt   =   Table1.id
                 and Таble3.idtt  =   Table1.id

Я так подозреваю, что "count"  в таком запросе не приемлем.
не подскажешь как правильно составить запрос?
Заранее благодарю. 
PM MAIL Skype   Вверх
Akina
Дата 31.3.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Wwolf @  31.3.2010,  16:16 Найти цитируемый пост)
Я так подозреваю, что "count"  в таком запросе не приемлем.

Угу. Причина проста - отсутствует Group By.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wwolf
Дата 31.3.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



Цитата(Akina @  31.3.2010,  16:21 Найти цитируемый пост)
Угу. Причина проста - отсутствует Group By.

Да. smile 
Спасибо

Вот только возникла ещё одна проблема в том же запросе
Дополнительно из Таблицы 3 необходимо вывести значение полей "D" и "F" у которого поле "D" имеет (max) значение

Table3
Код

---------------------------
|  idtt    |  d      |  f
---------------------------
|     1    |   0      |  11
|     2    |   1      |  22 
|     3    |   2      |  11
|     2    |   3      |  33
|     4    |   4      |  55

Код

SELECT   Table1.a  AS  a,
               count(Table3.idtt)  AS  c,
                 max(Table3.d) AS d,
                Table3.f
    FROM   Table1, Table2, Table3
    WHERE        Тable2.fio    =  'M'
                 and Table2.idt   =   Table1.id
                 and Таble3.idtt  =   Table1.id
   GROUP BY Table1.id


Значение "max(Table3.d)  AS d" выводится правильно, 
а вот "Table3.f"  у которого max(Table3.d), проблема  (выводит первое значение, а не "max") 
Вот такой должен быть правильный результат
Код

-----------------------------------------
|  a   |   c      |      d    |    f
------------------------------------------
   b    |    2    |      3    |    33
   c     |    1    |      2    |   11


а выводит 
[code=nocolor]
-----------------------------------------
|  a   |   c      |      d    |    f
------------------------------------------
   b    |    2    |      3    |    22
   c     |    1    |      2    |   11

Как правильно задать условие в данном запросе, чтобы выводилось значение "Table3.f"  у которого max(Table3.d)?  smile 



Это сообщение отредактировал(а) Wwolf - 31.3.2010, 18:02
PM MAIL Skype   Вверх
Akina
Дата 31.3.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Wwolf @  31.3.2010,  19:01 Найти цитируемый пост)
Как правильно задать условие в данном запросе, чтобы выводилось значение "Table3.f"  у которого max(Table3.d)?

в секции HAVING


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wwolf
Дата 31.3.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



Цитата(Akina @  31.3.2010,  18:03 Найти цитируемый пост)
в секции HAVING 

Код

SELECT   Table1.a  AS  a,
               count(Table3.idtt)  AS  c,
                 max(Table3.d) AS d,
                Table3.f
    FROM   Table1, Table2, Table3
    WHERE        Тable2.fio    =  'M'
                 and Table2.idt   =   Table1.id
                 and Таble3.idtt  =   Table1.id
   GROUP BY Table1.id
   HAVING max(Table3.d) 


Использование секции [HAVING ]
нужного результата не дало
получаем первое значение "Table3.f",  а не "Table3.f" у которого max(Table3.d) 
что ещё можно придумать?
PM MAIL Skype   Вверх
Akina
Дата 31.3.2010, 21:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Wwolf @  31.3.2010,  20:16 Найти цитируемый пост)
Использование секции [HAVING ]
нужного результата не дало

Перед использованием рекомендуется читать инструкцию


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wwolf
Дата 1.4.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



Цитата(Akina @  31.3.2010,  21:46 Найти цитируемый пост)
Перед использованием рекомендуется читать инструкцию 

Согласен.

Вопрос решил без использования секции [HAVING]
ИМХО, конечно могу ошибаться.  Данный вопрос не может быть решён через [HAVING]

PM MAIL Skype   Вверх
Akina
Дата 1.4.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Wwolf @  1.4.2010,  19:09 Найти цитируемый пост)
Вопрос решил без использования секции [HAVING]

Подзапрос залепил, небось...

Цитата(Wwolf @  1.4.2010,  19:09 Найти цитируемый пост)
Данный вопрос не может быть решён через [HAVING]

ну а если подумать... 
что тебе надо?
Цитата(Wwolf @  31.3.2010,  20:16 Найти цитируемый пост)
 "Table3.f" у которого max(Table3.d) 

Перефразирую:
"запись, у которой Table3.f равен max(Table3.d)"
Осталось записать это на SQL
Код

HAVING Table3.f = max(Table3.d)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wwolf
Дата 1.4.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



Цитата(Akina @  1.4.2010,  18:20 Найти цитируемый пост)
Подзапрос залепил, небось...

Нет. все намного проще...

Цитата(Akina @  1.4.2010,  18:20 Найти цитируемый пост)
1:
Код

HAVING Table3.f = max(Table3.d)


В данном запросе не дает нужного результата согласно поставленного условия в целом.
PM MAIL Skype   Вверх
Akina
Дата 1.4.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Wwolf @  1.4.2010,  19:52 Найти цитируемый пост)
все намного проще...

Ну тогда сортировка и взятие одной записи.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Wwolf
Дата 2.4.2010, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 16.6.2008
Где: Kiev region

Репутация: нет
Всего: 0



Цитата(Akina @  1.4.2010,  21:41 Найти цитируемый пост)
Ну тогда сортировка и взятие одной записи. 

нет. ещё проще
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1073 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.