Коррелированные запросы в SQL

В личном проекте глаз споткнулся о запрос, который выполнился, а не упал с ошибкой из-за отсутствующего поля. Вот запрос, который иллюстрирует подобное поведение СУБД (синтаксис MySQL 8):

with table_a(name, surname) as (
    select 'Вася' as name, 'Васильев' as surname
    union select all 'Петя', 'Петров'
    union select all 'Иван', 'Иванов'
),
table_b(surname, age) as (
    select 'Васильев' as surname, 45 as age
    union select all 'Петров', 40
    union select all 'Иванов', 35
)
select
  *
from
  table_a
where
  (name, surname) in (select name, surname from table_b);

— хотя в CTE-представлении table_b нет поля name, MySQL вернёт все три записи из table_a. И происходит это потому, что не найдя поле name в подзапросе, MySQL начинает поиск снаружи подзапроса и находит поле в основной таблице запроса. Запрос выше эквивалентен следующему:

select
  *
from
  table_a as ta
where
  (ta.name, ta.surname) in (
    select ta.name, tb.surname from table_b as tb
  );

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

Что такое абзетцер

А́бзетцер (отвалообразова́тель) — многочерпаковый экскаватор для выемки и перемещения пустых пород на отвалах карьеров [нем. Absetzer от absetzen — отодвигать, выгружать в отвал].

Абзетцер

Продолжить чтение →

Что такое чахэ

Чахэ́ — в китайской чайной церемонии: посуда для ознакомления с ароматом и внешним видом сухого чайного листа [кит. 茶荷 — лотосовый совочек].

Чахэ

Продолжить чтение →

Гаражаная распродажа

Продаю в Санкт-Петербурге (район метро Академическая). Что-то новое, что-то не очень. Возможно, именно вы это искали.

Электроника, офисная техника:

Графический планшет Wacom Intuos M Bluetooth (как новый) 15000р

Книги, журналы:

Учебник английского Военной Академии РККА (1922) (б/у) 3500р
Коллекционные журналы Maxim (б/у) 1000р/все сразу

Что такое нейробика

Нейро́бика — умственная гимнастика, аэробика для мозга, направленная для улучшения мыслительной деятельности.

Нейробика

Продолжить чтение →