powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Cтраны, куда не приходят корабли с целью "Торговля"
21 сообщений из 21, страница 1 из 1
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963847
lolfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица "журнал", которая содержит информацию о том какой корабль в какой порт прибыл, на какой причал и с какой целью. Нужно выбрать те страны, куда никогда не приходят корабли с целью "Торговля". Страна определяется по порту.
Вот такой запрос:
Код: sql
1.
2.
3.
4.
5.
SELECT p.country
FROM journal j
JOIN ship s ON j.ship=s.id
JOIN ports p ON j.port=p.id
WHERE j.purpose!="Торговля" GROUP BY p.country;


Что нужно добавить, что бы запрос был корректным? То есть страна не должна выводиться, если есть хотя бы одна запись с целью "Торговля". Например, есть две записи, в которых поле страна Россия, в одной записи цель посещения будет "Торговля", а в другой "Ремонт". В таком случае Россия выводиться не должна, что нужно добавить в запрос в такой ситуации?
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963851
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lolfireчто нужно добавить в запрос в такой ситуации?тут не добавлять, тут практически всё переписывать надо
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963859
lolfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, а в чем ошибка?
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963865
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с чего вы взяли, что тут есть ошибка? Запрос синтаксически корректен(вроде бы) и даже выдаст какие-никакие, но всё же результаты. Которые в общем-то можно даже описать человеческим языком...
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963875
lolfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, я знаю, что запрос корректен, но выводимые результаты не совсем корректны. Должно быть так: если есть хотя бы одна запись, где в поле Цель указано "Торговля", то эта страна не должна выводиться вообще, даже если есть другие записи с такой же страной, но с другой целью(не торговля). Мне в этом помощь и нужна.
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963882
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lolfireЧто нужно добавить, что бы запрос был корректным?Логику.
Ты выводишь страны, куда хотя бы в один порт хотя бы один раз заходил корабль НЕ с целью "Торговля".

А вообще тебе сюда: 15796547 .
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38963883
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lolfireесли есть хотя бы одна запись, где в поле Цель указано "Торговля", то эта страна не должна выводиться вообщену вот вы практически и написали запрос:

выбрать страны
из таблицы
где (в таблице нет записей с текущей страной и целью "торговля")

читайте про exists и коррелированные подзапросы
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964057
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirlolfireчто нужно добавить в запрос в такой ситуации?тут не добавлять, тут практически всё переписывать надоЗачем все?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT p.country
FROM journal j
JOIN ship s ON j.ship=s.id
JOIN ports p ON j.port=p.id
-- WHERE j.purpose!="Торговля" 
GROUP BY p.country
HAVING SUM(j.purpose="Торговля")=0
;
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964140
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFFTOP
А интересно, MySQL выкинет из плана запроса обращение к ship ?
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964160
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007 MySQL выкинет из плана запроса обращение к ship ?
Нет.
Структура не запрещает наличия записей в journal, не имеющих ни одной соотв. записи в таблице ship.
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964224
lolfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за помощь и советы
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964283
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaCygapb-007 MySQL выкинет из плана запроса обращение к ship ?
Нет.
Структура не запрещает наличия записей в journal, не имеющих ни одной соотв. записи в таблице ship.Оптимизатор MS SQL выкинет...
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964379
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007Оптимизатор MS SQL выкинет...И даст неверный результат? не верю.
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964621
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaCygapb-007Оптимизатор MS SQL выкинет...И даст неверный результат? не верю.Отчего тже неверный????
если таблица не используется ни в списке SELECTа, ни в фильтрации/связях - то нафига она вообще нужна в запросе?
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964633
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007

Ладно, я не гордый, разжую...

Допустим, в journal есть запись с journal.ship=100. А в ship записи с ship.id=100 нет.
В выходной набор запроса с таблицей ship эта запись НЕ попадёт.
Если убрать таблицу ship из плана - эта запись в выходной набор попадёт.
Следовательно, таблица из плана убрана быть не может, поскольку это изменит выходной набор.

ТАК понятно?
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964637
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina , не, ну FK в нормальной структуре никто не отменял... При наличии FK...
Где-то я читал, что оптимизатор MS SQL в состоянии удалить из запроса таблицы, не влияющие на результат, отсюда и вопрос по MySQL...

А ваше допущение о наличии отсутствующих в справочнике данных... немного похоже на притягивание ушей к ж...елаемому месту, сорь за абстракцию))
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964649
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007FK в нормальной структуре никто не отменял...Я не вижу ни полслова о наличии ключей, тем более внешних. Равно как и о наличии констрейнтов.

А только на основании текста запроса - однозначно можно утверждать, что без дополнительных (неозвученных тут) условий и ограничений таблицу из плана выбрасывать нельзя.
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964654
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaCygapb-007FK в нормальной структуре никто не отменял...Я не вижу ни полслова о наличии ключей, тем более внешних. Равно как и о наличии констрейнтов.

А только на основании текста запроса - однозначно можно утверждать, что без дополнительных (неозвученных тут) условий и ограничений таблицу из плана выбрасывать нельзя.Да, был неправ. Проверил - даже при наличии FK обращение в таблице есть в плане. И уходит только после LEFT JOIN.

Хорошо, уточню: если в запросе LEFT JOIN ship - будет ли в MySQL обращение к ship?
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964663
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал на скорую руку - нет, не выбрасывает вроде.
Возможно, криво смоделировал.
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964668
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
планы MS SQL
...
Рейтинг: 0 / 0
Cтраны, куда не приходят корабли с целью "Торговля"
    #38964672
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, вопрос не столь важен, просто было интересно протестировать оптимизатор SQL)
Спасибо за помощь)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Cтраны, куда не приходят корабли с целью "Торговля"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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