SQL. WITH. Наследование условий между табличными пространствами переходящими друг в друга
Имеется следующий код на SQL
WITH
WithTable1 AS
(
SELECT *
FROM Table1
WHERE myFavoriteLang = 'golang'
),
WithTable2 AS
(
SELECT
FROM WithTable1
WHERE myFavoriteLang = 'javascript'
)
SELECT *
FROM WithTable2;
Просьба проконсультировать по работе наследований условий между табличными пространствами. Выборка в результирующем селекте по параметру myFavoriteLang по какому работает?
- последнее дублирующее условие в WithTable2 перезатрет старое значение из WithTable2
- Эти условия дополнят друг друга. Единственное место где может быть удобно - это числовые, либо временные промежутки.
И вообще, есть ли какой то механизм изменения значения условия при наследовании между табличными пространствами как в описываемом коде?
Ответы (2 шт):
Табличное пространство - по сути отдельная таблица. Представьте, что вы сделали select с нужным условием и сохранили результат в другой таблице (собственно с именем пространства). Записей с не подошедшим условием в ней уже нет. Остальная часть запроса работает с этой "таблицей", так что ни о каком изменении условия постфактум речи идти не может. несколько условий на одно поле будут фактически объединяться по AND и лишь уменьшать выборку
Выборка в результирующем селекте по параметру myFavoriteLang по какому работает?
Оптимизатор раскроет запрос точно так же как сделал бы это со вьюшками.
SELECT
*
FROM
table1 t
WHERE
t.myFavoriteLang = 'golang'
and t.myFavoriteLang = 'javascript';