В каком порядке должен интерпретироваться код? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь интерпретировать этот код SQL, но, как бы я ни старался, я не получаю правильный вывод. Таблицы:

  T1     T2
C1 C2   C1 C2
A  1    A  4
A  2    A  2
B  2    B  2
C  1    D  5

Неправильно ли я читаю код (вверх -> вниз)? SELECT DISTINCT, не означает ли это, что я должен пропустить одну из строк каждой таблицы, которые являются дубликатами?

Должен ли я начать с объединения таблиц по условию T1.C1 = T2.C1?

Мой собственный вывод:

A 1 A 4
A 2 A 2
B 2 B 2

Правильный вывод:

A 2 A 2
A 2 A 4
B 2 B 2

Код, о котором идет речь:

SELECT DISTINCT T1.C1, T1.C2, T2.C1, T2.C2
FROM T1
JOIN T2 ON T1.C1 = T2.C1
WHERE T1.C2 IN (2, 4)

1 Ответ

3 голосов
/ 09 апреля 2019

Поток операторов SQL немного странный, пока вы к нему не привыкнете.

Сначала вы называете источник данных, в вашем случае виртуальная таблица, созданная с помощью этого.

FROM T1
JOIN T2 ON T1.C1 = T2.C1

Далее вы фильтруете источник данных.

WHERE T1.C2 IN (2, 4)

Далее вы выбираете нужные столбцы в наборе результатов вывода:

SELECT T1.C1, T1.C2, T2.C1, T2.C2 

Затем вы агрегируете данные, вставляя предложение DISTINCT или предложение GROUP BY.

Затем вы сортируете его с помощью предложения ORDER BY. У тебя его нет. Это нормально.

Это логическая структура SQL-запроса, подобного вашему. Но имейте в виду, что MySQL и другие серверы таблиц SQL имеют тысячи программистских лет, посвященных оптимизации этого материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...