я пробую этот код
SELECT e.codartp AS ARTICLE,e.codartc AS COMPONENTS, sa.CODALM as WAREHOUSE,
sa.unidades as UNITS, sa.UBICACION as 'LOCATION' FROM escandallo e
left join STOCKALM sa on e.codartc = sa.codart
where trim(e.codartp) = '30393' and sa.CODALM = 0
и это показывает, как это
ARTICLE COMPONENTS WAREHOUSE UNITS LOCATION
30393 310 0 376 XHY40081
30393 C042 0 302 NULL
30393 C042 0 1158 WCY40082
но я хотел бы, чтобы он также показывал несоответствующие результаты. Я знаю, что для этой статьи есть еще один компонент, но он не отображается, потому что table stockalm не включает товары с нулевым запасом.
Можно ли показать каждый компонент, даже если он не найден в объединенной таблице?
Большое спасибо
И наилучшей практикой является использование двух имен частей - включая имя схемы с именем таблицы. Я также предлагаю вам использовать более описательные псевдонимы в целом. Здесь это не имеет большого значения, но в более сложных запросах, которые ссылаются на объекты с очень похожими именами, это имеет значение. Развивайте ХОРОШИЕ привычки.
Я попытался переместить фильтр в условие соединения, но он показывает все статьи в таблице, а не только ту, которую я отфильтровал :(
Хорошо, исправлено, спасибо. Я добавил stockalm к условию соединения и продукту, как он был (где). Большое спасибо
Используйте условие в предложении ON вместо предложения WhereClause
SELECT e.codartp AS ARTICLE,e.codartc AS COMPONENTS, sa.CODALM as WAREHOUSE,
sa.unidades as UNITS, sa.UBICACION as 'LOCATION' FROM escandallo e
left join STOCKALM sa on e.codartc = sa.codart AND trim(e.codartp) = '30393' and sa.CODALM = 0
Также взгляните на это:
Теперь этот запрос фильтрует все записи, которые удовлетворяют из таблицы (escandallo) «trim (e.codartp) = '30393'» И все столбцы из таблицы «STOCKALM» как «NULL», что показывает несоответствие условия
SELECT e.codartp AS ARTICLE,e.codartc AS COMPONENTS, sa.CODALM as WAREHOUSE,
sa.unidades as UNITS, sa.UBICACION as 'LOCATION' FROM escandallo e
left join STOCKALM sa on e.codartc = sa.codart and sa.CODALM = 0
where trim(e.codartp) = '30393'
Хорошо, я исправил это, спасибо. Я добавил codalm к условию соединения и оставил codartp как есть. Большое спасибо
Когда вы ссылаетесь на столбец в своем предложении where из несохраненной таблицы (STOCKALM) вашего внешнего соединения, это логически превращает ваше внешнее соединение во внутреннее соединение. Поэтому переместите фильтр в ваше условие присоединения, как уже было предложено.