SQL. WITH. Наследование условий между табличными пространствами переходящими друг в друга

Рейтинг: 1Ответов: 2Опубликовано: 05.02.2023

Имеется следующий код на SQL

WITH 
  WithTable1 AS
  (
    SELECT *
    FROM Table1
    WHERE myFavoriteLang = 'golang'
  ),
  
  WithTable2 AS
  (
    SELECT 
    FROM WithTable1
    WHERE myFavoriteLang = 'javascript'
  )
SELECT *
FROM WithTable2;

Просьба проконсультировать по работе наследований условий между табличными пространствами. Выборка в результирующем селекте по параметру myFavoriteLang по какому работает?

  1. последнее дублирующее условие в WithTable2 перезатрет старое значение из WithTable2
  2. Эти условия дополнят друг друга. Единственное место где может быть удобно - это числовые, либо временные промежутки.

И вообще, есть ли какой то механизм изменения значения условия при наследовании между табличными пространствами как в описываемом коде?

Ответы

▲ 1

Табличное пространство - по сути отдельная таблица. Представьте, что вы сделали select с нужным условием и сохранили результат в другой таблице (собственно с именем пространства). Записей с не подошедшим условием в ней уже нет. Остальная часть запроса работает с этой "таблицей", так что ни о каком изменении условия постфактум речи идти не может. несколько условий на одно поле будут фактически объединяться по AND и лишь уменьшать выборку

▲ 0

Выборка в результирующем селекте по параметру myFavoriteLang по какому работает?

Оптимизатор раскроет запрос точно так же как сделал бы это со вьюшками.

SELECT
    *
FROM
    table1 t
WHERE
    t.myFavoriteLang = 'golang'
and t.myFavoriteLang = 'javascript';