#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
извлекает значение только один раз, даже если они существуют в обеих частях объединения.