В SQL Server можно использовать EXCEPT или INTERSECT и игнорировать столбец?

Вот мой вопрос,

CREATE TABLE
    #table1(ID int, Fruit varchar(50), Veg varchar(50))
INSERT INTO #table1 (ID,Fruit,Veg)
VALUES (1,'Apple', 'Potato')

CREATE TABLE
    #table2(ID int, Fruit varchar(50), Veg varchar(50))
INSERT INTO #table2 (ID,Fruit,Veg)
VALUES (2,'Apple', 'Potato')

SELECT * FROM #table1 INTERSECT SELECT * FROM #table2

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

Мне нужно сохранить идентификаторы в возвращаемых строках, поэтому в приведенном выше примере будут возвращены две строки, одна с идентификатором = 1, а другая с идентификатором = 2.

Если что-то, кроме идентификатора, отличается, ничего не будет возвращено.

Спасибо!


person AnalystIRL    schedule 29.04.2013    source источник
comment
Если таблицы содержат разные и несвязанные столбцы идентификаторов, почему вы используете SELECT *? Если вы просто перечислите фрукты, овощи, это должно работать нормально, верно? В противном случае вам нужно определить, какой идентификатор должен отображаться, когда пара Fruit/Veg появляется в обеих таблицах...   -  person Aaron Bertrand    schedule 29.04.2013
comment
или он мог показать оба, правильно?   -  person Abe Miessler    schedule 29.04.2013
comment
@Abe с Интерсектом? Как?   -  person Aaron Bertrand    schedule 29.04.2013
comment
Нет, извините, я думаю, я думал о том, чтобы сделать это с помощью JOIN.   -  person Abe Miessler    schedule 29.04.2013
comment
@Abe верно, вы можете сделать это другими способами, но не с INTERSECT.   -  person Aaron Bertrand    schedule 29.04.2013
comment
Вы можете, когда компенсируете столбцы несоответствия, использовать результат исключения/пересечения для соединения с новым запросом с использованием CTE. Попробуйте поискать в Google, кроме пересечения с cte, и вы можете найти решение проблемы.   -  person Independent    schedule 18.12.2013
comment
Связано: stackoverflow.com/q/10818067/6651   -  person Alex Angas    schedule 17.09.2015


Ответы (1)


Я не думаю, что это можно сделать с помощью INTERSECT. Может быть, вместо этого присоединиться?

SELECT t1.id, t2.id, t1.veg, t1.fruit
FROM Table1 as t1
INNER JOIN Table2 as t2
ON t1.veg = t2.veg AND t1.fruit = t2.fruit
person Abe Miessler    schedule 29.04.2013