powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом!
25 сообщений из 33, страница 1 из 2
Помогите с запросом!
    #38431389
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две структурно одинаковые таблицы tb1(16836 записей) и tb2 (34105)
там есть поле agent . Мне нужно выбрать все записи из tb2 несовпадающие по этому полю c tb1
Делаю запрос
Код: sql
1.
2.
3.
4.
5.
6.
select 
    `tb2`.*
  from 
    (`tb2` join `tb1`) 
  where 
    (`tb2`.`agent` <> `tb1`.`agent`)



И получаю целую гору значений (и то если LIMIT поставить) , а в дальнейшем выход за пределы памяти....
Всю голову разбил как????
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431401
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ получаю целую гору значений
а как надо если у тя их стопицот тысяч?
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431409
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курим маны по LEFT JOIN и использовании там WHERE table.field IS NULL
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431411
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

А что в WHERE начиркать чтоб выбрать только несовпадающие значения с tb1. Я вижу что получается образно произведение таблиц.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431415
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

LEFT JOIN так же к добру не приводит ....
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431418
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezДелаю запрос
Код: sql
1.
2.
3.
4.
5.
6.
select 
    `tb2`.*
  from 
    (`tb2` join `tb1`) 
  where 
    (`tb2`.`agent` <> `tb1`.`agent`)


Ага... Вот есть в одной таблице agent=1, и в другой agent=1. Будет ли выведена эта строка? Да, будет! почему? да потому что в другой таблице есть ещё запись с agent=2, для этой записи условие отбора выполняется. И запись выводится.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431419
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezLEFT JOIN так же к добру не приводит ....Правильно. Рук мало - надо ещё и голову приложить..
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431434
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

select
`tb2`.*
FROM
`tb2` LEFT JOIN `tb1`
ON
`tb2`.`agent` <> `tb1`.`agent`
WHERE
`tb1`.`agent` IS NULL

Пустой запрос.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431468
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezПустой запрос.
Я же говорил про голову.
Я даже объяснил, как работает
hedgehogelez
Код: sql
1.
ON `tb2`.`agent` <> `tb1`.`agent`
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431478
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Это понятно! Но при LEFT JOIN любые результаты с tb1 в набор всяко должны попадать. Или я и тут не прав?
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431514
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправ.
У тебя что?
Код: sql
1.
2.
FROM 
`tb2` LEFT JOIN `tb1` 


Значит, все записи будут из таблицы tb2. А из tb1 - только те записи, которые отвечают условию связывания.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431554
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНеправ.
У тебя что?
Код: sql
1.
2.
FROM 
`tb2` LEFT JOIN `tb1` 


Значит, все записи будут из таблицы tb2. А из tb1 - только те записи, которые отвечают условию связывания.

Да. Опечатался просто tb2 там. Вот же запрос!!!
select
`tb2`.*
FROM
`tb2` LEFT JOIN `tb1`
ON
`tb2`.`agent` <> `tb1`.`agent`
WHERE
`tb1`.`agent` IS NULL


А в итоге! => Пустой набор (1,373 сек)

По логике мускула у меня tb2 ПУСТАЯ!
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431583
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezПо логике мускула у меня tb2 ПУСТАЯ!Нет, она "пустая" по вашей "логике", которую логикой-то язык назвать не поворачивается. Читайте ещё раз 14985946 , думайте.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431597
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Логика у меня достойная предложения юзать LEFT JOIN c WHERE IS NULL целенаправленный совет обнулить набор.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431665
hedgehogelez`tb2`.`agent` <> `tb1`.`agent`= !
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431848
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezЛогика у меня достойная предложения юзать LEFT JOIN c WHERE IS NULLLJ + IS NULL это общепринятый чуть менее чем везде способ решения задач, подобных вашей
а то, что вы начинаете выёживаться вместо того, чтобы разобраться, говорит... ну вы сами понимаете о чём.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431849
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смоляное Чучелко,

ну вот, пришёл поручик и всё опошлил...
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38431994
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

ой, врядли допрёт.. :)
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432422
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предыстория! :-) Есть вот такая таблица
записей много ...
Задача: Выбрать всех `agent` у кого в поле `calc_month` нет записей в таблице с 42 ... 53 ,но есть в
поле `calc_month` < 42
Для выполнения сей задачи, были созданы два представления:
авторCREATE VIEV `tb<42` AS (
select
`sell`.*
from
`sell`
where
(`sell`.`calc_month` < 42 )
group by
`sell`.`agent`)

и аналогичное автор`tb>42` с where (`sell`.`calc_month` > 42 )

Кто нибудь русским языком объясните пожалуйста как мне из `tb<42` выбрать `agent` которых нет в `tb>42`.
По перечитал все что предлагали, но "чуйка" подсказывает - " без толчка в мозг не разберешься! "
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432445
hedgehogelez,

[NOT] EXISTS-подзапросы уже предлагали?
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432592
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теория с

SELECT
`tb<42`.*
FROM
`tb<42` LEFT JOIN `tb>42`
ON
`tb<42`.`agent` = `tb>42`.`agent`
WHERE `tb>42`.`agent` IS NULL

Так же не канает.....
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432636
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezбыли созданы два представления:авторCREATE VIEV `tb<42` AS (Не верю!
авторнет записей в таблице с 42 ... 53
Код: sql
1.
not exists (select 1 from table q where q.agent=agent and q.calc_month between 42 and 53)


авторесть в поле `calc_month` < 42"есть"="у искомой записи"? тогда
Код: sql
1.
`calc_month` < 42

а если "есть записи о том же агенте, в которых имеется 42 в этом поле", то см. предыдущий кусок кода с exists.

Надеюсь, запихнуть в where эти два условия самостоятельно сможете?
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432671
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Только что запрос доработал с
SELECT
`tb<42`.*
FROM
`tb<42` LEFT JOIN `tb>42`
ON
`tb<42`.`agent` = `tb>42`.`agent`
WHERE `tb>42`.`agent` IS NULL

возвращено записей: 32559 (00:52:07)
И это при 34105 в одном представлении и 14838 в другом записей.
Жутко долго, ужас..... :-(
Предложенный вариант тоже отработаю в течении дня... спс
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432745
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hedgehogelezЖутко долго, ужастак чего вы хотели, это же вьюшки, а майскуле они, как правило , медленно работают.
...
Рейтинг: 0 / 0
Помогите с запросом!
    #38432752
hedgehogelez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Если Вы это имели в виду:
SELECT
`sell`.*
FROM
`sell`
WHERE
`IF`(`sell`.`calc_month` < 42, 1, NOT EXISTS(SELECT 1 FROM `sell` WHERE `sell`.`agent` = `agent` and `sell`.`calc_month` between 42 and 54))
GROUP BY
sell.agent

то результат неверный.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]