Member 14071121 Ответов: 2

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


У меня есть два стола
Таблица 1 с двумя столбцами
На Col1 И Col2
В 1
А 2
В 3
B 1
B 2
B 3
С 1
С 2
С 3


Таблица 2 с двумя столбцами
На Col1 И Col2
В 1
B 2
B 3

Я хочу выводить данные в виде данных первой таблицы с игнорированием данных из второй таблицы. Данные в таблице 1 представлены в виде комбинации двух столбцов Col1 и Col2

Выход
На Col1 И Col2
А 2
В 3
B 1
С 1
С 2
С 3

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

Я пробовал некоторые решения

Выберите столбец col1, столбец col2 из table1 Т1
Таблица2 внутреннее соединение Т2 по
Т1.На col1 &ЛТ;&ГТ; (Т2.На col1)
и
Т1.Столбец col2 &ЛТ;&ГТ; (Т2.Столбец col2)

Кроме того, я попробовал левое соединение и извлечение, но не получил правильного решения для этого.
Не мог бы кто-нибудь, пожалуйста, предоставить какое-либо решение для вышеуказанного запроса. Заранее спасибо.

2 Ответов

Рейтинг:
13

OriginalGriff

ГМ, есть такие ... Операторы EXCEPT и INTERSECT[^]:

SELECT * FROM Table1
EXCEPT SELECT * FROM Table2


Member 14071121

Это сработало, спасибо !

OriginalGriff

Всегда пожалуйста!

Рейтинг:
0

LEOH88

Попробовать это

DECLARE @TABLE1 TABLE (
  Col1 VARCHAR(50), 
  Col2 int
)

DECLARE @TABLE2 TABLE (
  Col1 VARCHAR(50), 
  Col2 int
)

INSERT INTO	 @TABLE1
SELECT 'A' AS Col1, 1 AS Col2 UNION ALL
SELECT 'A' AS Col1, 2 AS Col2 UNION ALL
SELECT 'A' AS Col1, 3 AS Col2 UNION ALL
SELECT 'B' AS Col1, 1 AS Col2 UNION ALL
SELECT 'B' AS Col1, 2 AS Col2 UNION ALL
SELECT 'B' AS Col1, 3 AS Col2 UNION ALL
SELECT 'C' AS Col1, 1 AS Col2 UNION ALL
SELECT 'C' AS Col1, 2 AS Col2 UNION ALL
SELECT 'C' AS Col1, 3 AS Col2

INSERT INTO	 @TABLE2
SELECT 'A' AS Col1, 1 AS Col2 UNION ALL
SELECT 'B' AS Col1, 2 AS Col2 UNION ALL
SELECT 'B' AS Col1, 3 AS Col2

SELECT TABLE1.Col1,TABLE1.Col2
FROM (
		SELECT *, (Col1 + '_' + CONVERT(VARCHAR(50),Col2)) AS MultiCol
		FROM @TABLE1 ) AS TABLE1
WHERE TABLE1.MultiCol NOT IN  ( SELECT (Col1 + '_' + CONVERT(VARCHAR(50),Col2)) AS MultiCol
								FROM @TABLE2 )
								
-- OR

SELECT *
FROM @TABLE1
WHERE (Col1 + '_' + CONVERT(VARCHAR(50),Col2)) 
		NOT IN  ( SELECT (Col1 + '_' + CONVERT(VARCHAR(50),Col2)) AS MultiCol
				  FROM @TABLE2 )


Member 14071188

Выберите * из таблицы 1
Кроме SELECT * FROM Table2

Member 14071121

У меня есть решение по этому вопросу. Спасибо за ваше решение

Richard Deeming

Это ужасно неэффективный способ сделать это!

Даже если вы не можете использовать EXCEPT, ля NOT EXISTS предложение будет лучше:

SELECT *
FROM @Table1 As T1
WHERE NOT EXISTS
(
    SELECT 1
    FROM @Table2 As T2
    WHERE T2.Col1 = T1.Col1
    And T2.Col2 = T1.Col2
)