Как лучше сделать соединение в запросе?

1. SITR-utyos 1419 05.04.18 05:59 Сейчас в теме
В запросе у меня есть Таблица1 и Таблица2. Поля такие:
Таблица1
.Заказ

Таблица2
.ЗаказНаПроизводство
.ЗаказПокупателя

Мне нужно взять только записи, где (Таблица1.Заказ = Таблица2.ЗаказНаПроизводство) ИЛИ (Таблица1.Заказ = Таблица2.ЗаказПокупателя)?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. echo77 1880 05.04.18 06:01 Сейчас в теме +100 $m
(0) Лучше сделать объединение запросов с условиями - так будет работать заметно быстрее на больших объемах
т.е

Выбрать * Где Таблица1.Заказ = Таблица2.ЗаказНаПроизводство

Объединить ВСЕ

Выбрать * Где Таблица1.Заказ = Таблица2.ЗаказПокупателя
3. KAV2 156 05.04.18 06:33 Сейчас в теме
(2) У меня были сценарии когда переделка подобного запроса на следующий давала существенное уменьшение просканированных записей:

Выбрать* из Таблица1 ГДЕ Таблица1.Заказ В 
(ВЫБРАТЬ Таблица2.ЗаказНаПроизводство ИЗ Таблица2 
ОБЪЕДЕНИТЬ ВСЕ 
ВЫБРАТЬ Таблица2.ЗаказПокупателя ИЗ Таблица2)


Вложенный запрос можно вынести во временную таблицу и проиндексировать. Но все зависит от соотношения количества записей между таблицами Таблица1 и Таблица2 и индексирования.
4. herfis 498 05.04.18 06:46 Сейчас в теме
У вас продается славянский шкаф?
Шкаф продан, могу предложить никелированную кровать с тумбочкой.
mad375; TODD22; +2 Ответить
5. SerVer1C 750 05.04.18 09:12 Сейчас в теме
Что это? Фиктивный переброс СМ с одного аккаунта на другой?
6. fokin 05.04.18 09:13 Сейчас в теме
(5)
тоже хотел поинтересоваться)
какой то обнал)
7. Jimbo 9 05.04.18 10:59 Сейчас в теме
вопрос теоретический или практический ? какая СУБД ? тут 3 варианта.

1 - самый простой, хорошо для Oracle, но плохо работает ИЛИ на Ms SQL

ВЫБРАТЬ
	таблица1.Заказ
ИЗ
	таблица1 КАК таблица1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
		ПО (таблица1.Заказ = Таблица2.ЗаказНаПроизводство
				ИЛИ таблица1.Заказ = Таблица2.ЗаказПокупателя)

2 - убираем ИЛИ,  хорошо для MS SQL/////////////////////////////////////////////////////////­////////////////////////////////////////////

ВЫБРАТЬ
	таблица1.Заказ
ИЗ
	таблица1 КАК таблица1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
		ПО таблица1.Заказ = Таблица2.ЗаказНаПроизводство

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	таблица1.Заказ
ИЗ
	таблица1 КАК таблица1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
		ПО таблица1.Заказ = Таблица2.ЗаказПокупателя
Показать

и 3 вариант от kav kav (alexkmbk) для малого количества данных , в разных СУБД разные ограничения, то ли 256, то ли 1000 элементов В, (иначе оптимизатор СУБД все равно переделает на внутреннее соединение)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот