MS-Access SQL Выберите один из двух столбцов, если значение встречается в другой таблице

#sql #ms-access

#sql #ms-access

Вопрос:

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

Исходная таблица:

DataA База данных
Apple Apple
Оранжевый Ora
Pinea Ананас
Компьютер ABCD123

Таблица для проверки записей:

Данные
Apple
Оранжевый
Ананас

Результирующий запрос:

Результат
Apple
Оранжевый
Ананас

Четвертая запись исходной таблицы (Компьютер / ABCD123) недопустима, поскольку ни «Компьютер», ни «ABCD123» не существуют в контрольной таблице.

Я пытался:

 Select 
Switch(
       DataA in (SELECT DataC FROM CheckTable), DataA, --if DataA is found in DataC, select DataA
       DataB in (SELECT DataC FROM CheckTable), DataB, --if DataB is found in DataC, select DataB
      ) AS Result --return variable 'Result'
FROM SourceTable;
 

безуспешно.

Ответ №1:

Попробуйте:

 select distinct DataC as result 
from check_tbl 
where DataC in (select distinct DataA 
                from source_tbl) 
or DataC in ( select distinct DataB 
              from source_tbl)
 

Примеры данных:

 create table source_tbl(
DataA varchar(30),
DataB varchar (30) );

insert into source_tbl values 
                     ('Apple','Apple'),
                     ('Orange','Ora'),
                     ('Pinea','Pineapple'),
                     ('Computer','ABCD123');

create table check_tbl(
DataC varchar(30)    );

insert into check_tbl values 
                      ('Apple'),
                      ('Orange'),
                      ('Pineapple');
 

Результат:

 result
Apple
Orange
Pineapple
 

Демонстрация: https: //dbfiddle.uk/?rdbms=sqlserver_2019amp;fiddle=8b0a13a07ae245b00616bb24b0a972b0

Ответ №2:

Достаточно простого UNION :

 SELECT DataA 
FROM Demo1 INNER JOIN DemoCheck ON Demo1.DataA = DemoCheck.DataC;
UNION
SELECT DataB 
FROM Demo1 INNER JOIN DemoCheck ON Demo1.DataB = DemoCheck.DataC;
 

A UNION извлекает значение только один раз, даже если они существуют в обеих частях объединения.