powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод данных
8 сообщений из 8, страница 1 из 1
Вывод данных
    #40107378
Ablaykhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, постараюсь максимально понятно объяснить. У меня есть таблица "Справочник" где лежат только активные товары которые продаются, и есть таблица "остатки" в которых лежат данные по товарам и по количеству остатков товара. Мне нужно вывести товары у которых нету остатков но они должны быть активными.
Я написал вот такой скрипт:
Код: sql
1.
2.
3.
SELECT *
FROM [dbo].[СПРАВОЧНИК]
FULL JOIN [WeeKly].[dbo].[ОСТАТКИ] ON [code] = [ProductCode]



Он должен был вывести такой результат:
справочникостаткиa23a4a5anullanulla6

null-это значение товаров у которых нету остатков но они активные.

но
вместо этого он мне выкидывает
справочникостаткиa23a4a5null23null12a6

Короче говоря он добавляет мне остатки товаров которые не активные, но он выдает null так как в таблице "справочник" только активные товары.

В идеале мне нужен запрос результат которого будет :
справочникостаткиanullanullanullanull
Товары у которых нету остатков.
Для тех кто не понял скажем так есть 100 товаров и есть таблица остатков, когда я их объединяю он мне выводит только те товары у которых есть остатки на выходе допустим он выдает 60 товаров, но мне нужно чтобы он вывел 40 товаров у которых нет остатков.
Добрые люди, подскажите как это сделать начинающему специалисту
...
Рейтинг: 0 / 0
Вывод данных
    #40107405
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ablaykhan,

потому что нужно понимать, что вы делаете, и что вы хотите в итоге получить.
настоятельно рекомендую вам ознакомится с азами https://www.techonthenet.com/sql_server/joins.php
...
Рейтинг: 0 / 0
Вывод данных
    #40107453
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ablaykhan,

AblaykhanТовары у которых нету остатков.
Для тех кто не понял скажем так есть 100 товаров и есть таблица остатков, когда я их объединяю он мне выводит только те товары у которых есть остатки на выходе допустим он выдает 60 товаров, но мне нужно чтобы он вывел 40 товаров у которых нет остатков.
Добрые люди, подскажите как это сделать начинающему специалисту
замените full на left

и почитайте статью, инетерсная
...
Рейтинг: 0 / 0
Вывод данных
    #40107623
Ablaykhan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gerasimenko,
Спасибо большое, прочитал статью. Full заменил на Left. Как я понял он должен был мне вернуть только те строки из таблицы остатков, в которых объединенные поля равны, а те которые в таблице справочника не существует в таблице заказов, все поля в таблице заказов должны были отображаться как <null > в наборе результатов. Но когда я вызываю саму таблицу:
Код: sql
1.
select * from [dbo].[справочник]


он выдает 47505 строк

Но когда я делаю левое соединение:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SET DATEFIRST 1
DECLARE @startDate date, @endDate date;
SET @startDate = '2021-10-27'
SET @endDate = '2021-10-27';

select * from [dbo].[справочник]
LEFT JOIN [WeeKly].[dbo].[ostatki] ON [code]=[ProductCode]
WHERE [Date_time] BETWEEN @startDate AND @endDate 



Он выдает 31864 строк, хотя должен был выдать как минимум столько же строк и рядом в столбце остатков вывести <null >.
В идеале он мне должен вывести только те товары у которых нету остатков.
...
Рейтинг: 0 / 0
Вывод данных
    #40107632
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ablaykhan,

потому что Вы не понимаете, как работает WHERE.
не зная структуру Ваших данных, могу предположить, что условие из WHERE нужно перенести в LEFT JOIN
...
Рейтинг: 0 / 0
Вывод данных
    #40107662
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko
Ablaykhan,

потому что Вы не понимаете, как работает WHERE.
не зная структуру Ваших данных, могу предположить, что условие из WHERE нужно перенести в LEFT JOIN
+1
Условия для внешних таблиц в WHERE допустимы только при INNER JOIN. Для внешних джоинов условия должны быть только в секции ON.
...
Рейтинг: 0 / 0
Вывод данных
    #40107670
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Условия для внешних таблиц в WHERE допустимы только при INNER JOIN. Для внешних джоинов условия должны быть только в секции ON.

Эту поправку к конституции разве приняли?

Условия должны быть там, где они должны быть.
ВашЪ КО.
...
Рейтинг: 0 / 0
Вывод данных
    #40107691
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Условия для внешних таблиц в WHERE допустимы только при INNER JOIN. Для внешних джоинов условия должны быть только в секции ON
А если написать
Код: sql
1.
WHERE [Date_time] IS NULL OR [Date_time] BETWEEN @startDate AND @endDate

??
Однако, не понимаю, почему вы не используете алиасы таблиц? И не пишете алиасы у полей таблиц в запросе?
По крайней мере, всегда было бы понятно, какие поля из каких таблиц используются.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вывод данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]