MariaDB Левый присоединиться не возвращает ожидаемых результатов - PullRequest
1 голос
/ 11 марта 2019

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

SELECT a.TABLE_NAME, b.CONSTRAINT_NAME from information_schema.tables a
LEFT JOIN information_schema.table_constraints b
    ON a.table_name = b.table_name
WHERE a.table_schema = 'world'
    AND b.constraint_type = 'FOREIGN KEY';

Моя тестовая таблица "world" содержит 3 столбца - Страна (без FK), CountryLanguage (один FK) и Город (один FK). С помощью приведенного выше запроса я ожидал бы 3 таблицы, 2 из которых возвращают имя FK, а 1 - ноль, однако я получаю только 2 таблицы с FK на них.

Я уверен, что я что-то упустил, но не могу это закрепить.

1 Ответ

1 голос
/ 11 марта 2019

Вы должны переместить условие левого соединения в предложении ON, а не там, где

    select a.TABLE_NAME
        , b.CONSTRAINT_NAME 
    from information_schema.tables a
    left join information_schema.table_constraints b
        on a.table_name = b.table_name
            and b.constraint_type = 'FOREIGN KEY';
    where a.table_schema = 'world'

Если вы используете столбец таблицы левого соединения в предложении where, это работает как внутреннее соединение.Условие ON с предложением others для левых столбцов

...