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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написать запрос, Count() 
:(
    Опции темы
Moid
Дата 18.11.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

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



В table1 есть поле id в table2 много различных записей, которым соответствует table1.id.
Хочу написать вьюшку, которая отобразит весь список table1 и сколько соответствует ему записей из т2

Это сообщение отредактировал(а) Moid - 18.11.2008, 16:31


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
1stain
Дата 18.11.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 5
Всего: 40



Код

SELECT
    t1.ID, COUNT(t2.ID)
FROM
    Table1 t1
LEFT JOIN 
    Table2 t2
    ON t1.ID = t2.Table1_ID
GROUP BY
    t1.ID


http://www.sql-tutorial.ru/


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
MasterOfCode
Дата 18.11.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



1stain, наш админ не советует использовать конструкции left join, говорит эта конструкция подключет только динамические индексы и такой запрос будет работать быстрее:
Код

SELECT
    t1.ID, COUNT(t2.ID)
FROM
    Table1 t1,
    Table2 t2
WHERE
    t1.ID = t2.Table1_ID
GROUP BY
    t1.ID

Я проверил, и действительно. smile На базах Oracle и MS SQL 2000 конструкция с where отрабатывает быстрее.


--------------------
user posted image
PM ICQ   Вверх
1stain
Дата 18.11.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 5
Всего: 40



MasterOfCode, это если наплевать на записи из table1, для которых нет ни одного попадания в table2


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
MasterOfCode
Дата 18.11.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



1stain, что мешает делать так?
Код

SELECT
    t1.ID, COUNT(t2.ID)
FROM
    Table1 t1,
    Table2 t2
WHERE
    t1.ID(+) = t2.Table1_ID
GROUP BY
    t1.ID



--------------------
user posted image
PM ICQ   Вверх
1stain
Дата 18.11.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 5
Всего: 40



MasterOfCode, ничего, кроме того, что это синтакис Oracl'a для все тех же LEFT/RIGHT OUTER JOIN


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Moid
Дата 19.11.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

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



"t2.Table1_ID"  - это что?

Видимо я не совсем точно сформулировал задачу. 

В t1:

Код

ID   Label

1    L1
2    L2



В t2:

Код

ID  Vol

1    32
2    12
2    59
2    16



Запрос должен показать результат:


Код

ID  _Count

1   1
2   3



Это сообщение отредактировал(а) Moid - 19.11.2008, 10:46


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
Idsa
Дата 19.11.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Код

select t2.id, count(t2.id) from t1
left join t2 on t1.id = t2.id
group by t2.id



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Moid
Дата 19.11.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

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



Idsa, этот запрос возвращает общее кол-во записей.

Код

ID  _Count

1   4
2   4



--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
MasterOfCode
Дата 19.11.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Код

select t1.id, count(t2.id) from t1
left join t2 on t1.id = t2.id
group by t1.id



--------------------
user posted image
PM ICQ   Вверх
Moid
Дата 19.11.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

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



MasterOfCode, тот же результат.


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
MasterOfCode
Дата 19.11.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Moid, А  БД какая?



--------------------
user posted image
PM ICQ   Вверх
Idsa
Дата 19.11.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Moid @  19.11.2008,  15:19 Найти цитируемый пост)
Idsa, этот запрос возвращает общее кол-во записей.

На Sql Server 2005 этот запрос возвращает именно то, что Вы хотели получить.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Moid
Дата 19.11.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

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



SQL Server 2008, хм... создал тестовую базу- работает... ошибка была в том, что если несколько одинаковых записей в t1.id(таблицу нужно было проверять по нескольким полям), то результирующее значение перемножалось.

Спасибо всем за помощь!


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
Moid
Дата 20.11.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

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



ok

Это сообщение отредактировал(а) Moid - 20.11.2008, 16:53


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




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


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

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