в сфере мастера базы данных, выполнение сложных поисков данных с использованием левых соединений является общей практикой. Однако иногда левое соединение не ведет себя так, как ожидалось. 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 в предикат соединения:
AND (c.foobar = 'somethingelse' OR c.foobar IS NULL)
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3