Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > MySQL & MariaDB

Запрос для выборки по двум таблицам базы данных : MySQL & MariaDB

19.04.2024 2:15


03.05.2018 12:21
Mtirt
 
А если забыть слово Join и просто перечислить таблицы из которых нужно выбрать данные через запятую?
А в условие написать условий равенства полей?
Как это делается в оракле...
03.05.2018 14:12
Никита
 
наделал я костылей короче((((
есть три запроса которые когда работают по одиночке все выполняют
SELECT * FROM local_auth_account_journal WHERE date BETWEEN TIMESTAMP('2018-05-01') AND TIMESTAMP('2018-05-02'); //ищет все значения от установленной даты
SELECT * FROM local_auth_account_journal WHERE account_id IN (SELECT account_id FROM local_auth_account_journal GROUP BY account_id HAVING COUNT(account_id)>3); //ищет совпадение более 3
SELECT * FROM local_auth_account_journal WHERE comment = 'Начисление скидки на счет клиента' OR comment = 'UnC: Начисление скидки на счет клиента'; // ищет строки с данным текстом

вопрос.....как их все вместе объединить в один запрос чтобы все они работали .....?
03.05.2018 14:23
Mtirt
 
А что не работает здесь?
Код:
SELECT * FROM local_auth_account_journal WHERE date BETWEEN TIMESTAMP('2018-05-01') AND TIMESTAMP('2018-05-02')
AND  account_id IN (SELECT account_id FROM local_auth_account_journal GROUP BY account_id HAVING COUNT(account_id)>3)
AND comment = 'Начисление скидки на счет клиента' OR comment = 'UnC: Начисление скидки на счет клиента';
03.05.2018 14:24
konst
 
в подзапрос диапазон дат тоже добавить надо
03.05.2018 14:27
Mtirt
 
Ну, на самом деле, там еще скобочки нужны...
Как минимум в третьем условии.
03.05.2018 14:32
Никита
 
Цитата:
Mtirt А что не работает здесь?
Код:
SELECT * FROM local_auth_account_journal WHERE date BETWEEN TIMESTAMP('2018-05-01') AND TIMESTAMP('2018-05-02')
AND  account_id IN (SELECT account_id FROM local_auth_account_journal GROUP BY account_id HAVING COUNT(account_id)>3)
AND comment = 'Начисление скидки на счет клиента' OR comment = 'UnC: Начисление скидки на счет клиента';
вот что выдают запросы
31014 982 0,32 01.05.2018 23:04:08 1 144067 1015004 Начисление скидки на счет клиента 2,26 01.05.2018 22:56:09
31011 1006 0,37 01.05.2018 22:53:54 1 144059 1015004 Начисление скидки на счет клиента 0,66 01.05.2018 22:45:27
31010 1071 0,10 01.05.2018 22:43:37 1 185928 1010002 Начисление скидки на счет клиента 0,16 01.05.2018 22:41:00
31009 1071 -0,16 01.05.2018 22:43:36 1 185928 1010002 Скидка - Бонус списание персонал 0,06 01.05.2018 22:41:00
31012 931 -0,96 01.05.2018 22:41:35 1 123428 1018001 Скидка - Бонус списание персонал 0,10 01.05.2018 22:47:45
30997 1074 0,17 01.05.2018 22:39:46 1 147454 1015003 Начисление скидки на счет клиента 0,74 01.05.2018 22:20:11
31007 359 0,09 01.05.2018 22:36:42 1 65604 1020002 Начисление скидки на счет клиента 2,12 01.05.2018 22:34:38



1. пишут Скидка - бонус списания персонал....хотя не должны
2. выводят строки без совпадений (должны выводить только те где есть совпадения более 3 раз)
3. по отдельности все отрабатывает идеально
03.05.2018 14:32
Никита
 
Цитата:
konst в подзапрос диапазон дат тоже добавить надо

что вы имели ввиду...не совсем вас понял
03.05.2018 14:37
Mtirt
 
Он имел ввиду это:
Код:
SELECT * FROM local_auth_account_journal WHERE date BETWEEN TIMESTAMP('2018-05-01') AND TIMESTAMP('2018-05-02')
AND  account_id IN (SELECT account_id FROM local_auth_account_journal GROUP BY account_id HAVING COUNT(account_id)>3 AND
 date BETWEEN TIMESTAMP('2018-05-01') AND TIMESTAMP('2018-05-02'))
AND (comment = 'Начисление скидки на счет клиента' OR comment = 'UnC: Начисление скидки на счет клиента');
Часовой пояс GMT +3, время: 02:15.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.