powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про фильтр
5 сообщений из 5, страница 1 из 1
Вопрос про фильтр
    #40115677
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть такой SQL-запрос
SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
WITH Table1 AS
(SELECT
	*
FROM
	(VALUES
		('SKU 1'), ('SKU 2'), ('SKU 3'), ('SKU 4')
	) AS t (SKU)
),

Table2 AS
(SELECT
	*
FROM
	(VALUES
		('Клиент 1'), ('Клиент 2'), ('Клиент 3'), ('Клиент 4')
	) AS t (Клиент)
)

SELECT
	SKU
FROM
	Table1
WHERE
	SKU IN (SELECT SKU FROM Table2);

И возвращает такой результат:

SKUSKU 1SKU 2SKU 3SKU 4
Объясните, пожалуйста, почему возвращает такой результат и почему так работает? В WHERE обращается к table2, где есть поле Клиент , но почему то студия не ругается, что в SELECT используется поле SKU . Выводит результат. Это что за явление такое в SQL?
...
Рейтинг: 0 / 0
Вопрос про фильтр
    #40115684
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разруха не в сортирах.
Разруха в мозгах.

Это документированное поведение.

ЗЫ. Хочешь однозначности - не ленись писать ФУЛЛ КВАЛИФАЕД НЭЙМ.

Код: sql
1.
2.
3.
4.
5.
6.
SELECT
	SKU
FROM
	Table1
WHERE
	SKU IN (SELECT t2.SKU FROM Table2 as t2);
...
Рейтинг: 0 / 0
Вопрос про фильтр
    #40115685
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подзапрос не возвращает поле с именем SKU, а это имя указано в подзапросе,
проверяется наличие такого имени во внешнем запросе (по отношению к подзапросу).
В данном случае такое имя во внешнем (главном) запросе есть.
В результате в условии проверяется равенство значения поля SKU полю SKU.
Проверка всегда возвращает TRUE (если SKU не равно NULL, естественно).

Всегда используйте алиасы таблиц в запросе. Тогда не придётся удивляться "странному" результату.
...
Рейтинг: 0 / 0
Вопрос про фильтр
    #40115695
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно!
...
Рейтинг: 0 / 0
Вопрос про фильтр
    #40115700
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Здравствуйте!

Есть такой SQL-запрос
SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
WITH Table1 AS
(SELECT
	*
FROM
	(VALUES
		('SKU 1'), ('SKU 2'), ('SKU 3'), ('SKU 4')
	) AS t (SKU)
),

Table2 AS
(SELECT
	*
FROM
	(VALUES
		('Клиент 1'), ('Клиент 2'), ('Клиент 3'), ('Клиент 4')
	) AS t (Клиент)
)

SELECT
	SKU
FROM
	Table1
WHERE
	SKU IN (SELECT SKU FROM Table2);

И возвращает такой результат:

SKUSKU 1SKU 2SKU 3SKU 4

Объясните, пожалуйста, почему возвращает такой результат и почему так работает? В WHERE обращается к table2, где есть поле Клиент , но почему то студия не ругается, что в SELECT используется поле SKU . Выводит результат. Это что за явление такое в SQL?

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


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