Computer Wiz99 Ответов: 3

Почему мой SQL-запрос вытягивает другие данные?


У меня есть SQL-запрос, который сравнивает одну таблицу базы данных с другой. Когда я запускаю запрос, он дает мне данные, но он также дает мне данные, которые, как я знаю, находятся в базе данных. Я пытаюсь взять таблицу 1 и сравнить ее с таблицей 2. Я хочу отобразить данные, которых нет в таблице 2, а есть в Таблице 1.

Вот мой запрос:

SELECT User_ID, Name FROM Table1

EXCEPT 

SELECT User_ID, NAME FROM Table2 where YEAR = 2016

GROUP BY

    User_ID, Name


Я что-то пропустил?

Что я уже пробовал:

Я попытался переключить запрос.

3 Ответов

Рейтинг:
21

barneyman

select * from table1 where user_id not in (select user_id from table2 where year='2016')


я не * думаю*, кроме как работает над разными столами


Computer Wiz99

Спасибо за помощь. У меня есть вопрос. Когда я использую EXCEPT в других запросах, он работает для разных таблиц. Как ты думаешь, почему все началось именно сейчас?

Richard Deeming

Такого ограничения нет - EXCEPT работает в разных таблицах, разных базах данных и даже на разных серверах. Единственное ограничение состоит в том, что оба входа должны иметь одинаковое количество столбцов с совместимыми типами данных.

Кроме и пересекаются (Transact-SQL)[^]

Computer Wiz99

Итак, вы говорите, что таблицы Table1 и Table2 должны иметь одинаковое количество столбцов для правильной работы EXCEPT? Даже если я выберу эти столбцы?

Richard Deeming

Нет ... входные запросы должно быть одинаковое количество столбцов.

Не имеет значения, сколько столбцов имеет исходная таблица. Это не имеет значения, если вы соединяете несколько таблиц. Не имеет значения, есть ли в запросе вычисляемые столбцы.

До тех пор, пока два запроса имеют одинаковое количество столбцов и типы данных совместимы, EXCEPT будет работать.

Рейтинг:
0

Karthik_Mahalingam

Возможно, вы что-то упускаете, это работает так, как ожидалось.

declare @t1 table (
 col1 varchar(10)
)

declare @t2 table (
 col1 varchar(10),
 id int)

 insert into @t1 (col1) values ('a')
 insert into @t1 (col1) values ('b')
 insert into @t1 (col1) values ('c')

  insert into @t2 (col1,id) values ('a',0)
 insert into @t2 (col1,id) values ('b',1)
 insert into @t2 (col1,id) values ('c',0)

 select col1 from @t1 except
 select col1 from @t2 where id = 1
 group by col1


он возвращает "А" и "с"


Рейтинг:
0

Member 12999924

(Выберите функция user_id, имя из таблицы table1)

МИНУС

(Выберите User_ID, имя из таблицы 2, где Year =2016)


Computer Wiz99

Член 12999924, я получил синтаксическую ошибку при запуске вашего кода.

Msg 102, Уровень 15, Состояние 1, Строка 3
Неправильный синтаксис рядом с "минусом".

AnvilRanger

Минус это Оракул эквивалент кроме