Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2016, 06:16   #1
ZippeL
Новичок
Джуниор
 
Регистрация: 02.09.2016
Сообщений: 3
Радость Не получается сформировать запрос JOIN

Есть две таблицы:

1.
aid name

2.
aid * * * * *

Код:
SELECT
    COUNT(*), table1.aid, table2.name
FROM
    table1 CROSS JOIN table2
ON table2.aid = 1;
Цитата:
Result: 5940 1 AccountName

В данном случае aid идентичны. Первая таблица содержит аккаунты. Вторая таблица содержит записи сделанные этими аккаунтами.

Пытаюсь написать запрос который произведет COUNT по aid с помощью JOIN функции. Однако нихера не получается.
Результат учитывает какой то циклический проход всей второй таблицы ДЛЯ ВСЕХ aid первой таблицы. Подскажите где камень в этой ситуации?

P.S. ЭТА ПРОБЛЕМА РЕШИЛАСЬ добавление условия в ON.
Код:
ON table2.aid = 1 AND table2.aid = table1.aid;

Последний раз редактировалось ZippeL; 02.09.2016 в 06:25.
ZippeL вне форума Ответить с цитированием
Старый 02.09.2016, 06:49   #2
ZippeL
Новичок
Джуниор
 
Регистрация: 02.09.2016
Сообщений: 3
По умолчанию

Вторая проблема возникает при выполнении процедуры.
Код:
SELECT
    COUNT(*), table1.aid, table1.user
FROM
    table1 CROSS JOIN table2
ON (table1.aid IN (SELECT `aid` FROM `table1` WHERE `lastdate` >= NOW())) AND table1.aid = table2.aid;
Данный запрос выполняет обработку правильно. Однако только для первой строки. Т.е. для первого aid из всего SELECT запроса WHERE `lastdate` >= NOW().
Их там порядка 10 и будет еще больше. Подскажите как сделать обработку всех aid в этой процедуре. Спс.
ZippeL вне форума Ответить с цитированием
Старый 02.09.2016, 08:03   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Что за любовь к CROSS JOIN? За все время работы с sql ни разу cross не использовал. Нужно понимать, что cross дает результирующую выборку с n*m записей, где n и m количество записей в одной и другой таблице. На внутреннее соединение запрет?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.09.2016, 08:35   #4
ZippeL
Новичок
Джуниор
 
Регистрация: 02.09.2016
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Что за любовь к CROSS JOIN? За все время работы с sql ни разу cross не использовал. Нужно понимать, что cross дает результирующую выборку с n*m записей, где n и m количество записей в одной и другой таблице. На внутреннее соединение запрет?
Если честно я вообще не очень часто сталкиваюсь с БД. По этому про JOIN не могу спорить. Могу только сказать что меня он устраивает пока работает. Да запрет.
Но проблема остается. Этот запрос обрабатывает только первый результат SELECT запроса в IN. Остальные он игнорирует. Кстати = ANY дает тот же результат что и IN
Изображения
Тип файла: jpg запрос.jpg (32.1 Кб, 78 просмотров)
Тип файла: jpg результат.jpg (6.0 Кб, 70 просмотров)
Тип файла: jpg select.jpg (8.1 Кб, 73 просмотров)
Тип файла: jpg result.jpg (5.6 Кб, 66 просмотров)

Последний раз редактировалось ZippeL; 02.09.2016 в 08:58.
ZippeL вне форума Ответить с цитированием
Старый 02.09.2016, 15:06   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
SELECT COUNT(*), table1.aid, table1.user
FROM table1 
CROSS JOIN table2 ON table1.aid = table2.aid
WHERE table1.lastdate >= NOW()
Код:
SELECT isnull(t2.cnt,0) as cnt, table1.aid, table1.user
FROM table1 
LEFT JOIN ( select COUNT(*) as cnt, table2.aid 
            from tabel2 
          ) as t2 ON table1.aid = t2.aid
WHERE table1.lastdate >= NOW()
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.09.2016, 16:03   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
P.S. ЭТА ПРОБЛЕМА РЕШИЛАСЬ добавление условия в ON.
убрать cross оттуда нафик
come-on вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос JOIN ponam2016 SQL, базы данных 3 16.06.2016 15:22
Запрос к БД с использованием LEFT JOIN MaGWaY_minsk SQL, базы данных 6 07.02.2014 15:24
запрос с left join KatrinSecret SQL, базы данных 2 18.01.2012 22:31
Join(запрос) clbman SQL, базы данных 8 14.06.2010 15:52
не получается запрос с inner join :mad: Только_Учусь SQL, базы данных 16 21.07.2008 09:40