«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему левые соединения выглядят как внутриполомы при фильтрации в предложении «Где в правом таблице»?

Почему левые соединения выглядят как внутриполомы при фильтрации в предложении «Где в правом таблице»?

Опубликовано в 2025-04-30
Просматривать:225

Why Does My Left Join Act Like an Inner Join When Filtering on the Right Table's Column in the WHERE Clause?

Left Join Conundrum: часы ведьмы, когда он превращается во внутреннее соединение

в сфере мастера базы данных, выполнение сложных поисков данных с использованием левых соединений является общей практикой. Однако иногда левое соединение не ведет себя так, как ожидалось. A.foo, Б.Бар, C.foobar От Tableone как Внутреннее соединение Tabletwo как b на A.pk = b.fk Левое соединение TableTheRe как c на b.pk = c.fk Где a.foo = 'что -то' И c.foobar = 'somethingelse';

интригующе, когда условие C.foobar помещается в предложение «Где», как указано выше, предположительно левое соединение, по -видимому, превращается в внутреннее соединение. Результаты возвращаются только в том случае, если соответствуют критерии A.FOO и C.Foobar. Ключ заключается в пункте «Где». Когда значение с правой стороны левой соединения (правая сторона, относящаяся к таблице на правой стороне предложения ON), указано в предложении WHERE, все нулевые значения отбрасываются, эффективно уменьшая левое соединение до внутреннего соединения. Просто поместите, если C.foobar не присутствует в TableThree, запрос возвращает No Rows.

SELECT
a.foo,
b.bar,
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
WHERE a.foo = 'something'
AND c.foobar = 'somethingelse';

поправить, чтобы рассмотреть как действительные, так и нулевые значения для C.foobar:

переместить условие C.foobar в предикат соединения:
  1. левый соединение TableThree как c на b.pk = c.fk и c.foobar = 'sometherelse'
AND (c.foobar = 'somethingelse' OR c.foobar IS NULL)
    выбора между этими солью. Однако понимание основного поведения левых соединений в присутствии того, где положения имеет решающее значение для освоения методов извлечения данных.
  1. ]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3