繁体   English   中英

MS-Access SQL Select 如果值出现在另一个表中,则为两列之一

[英]MS-Access SQL Select one of two columns if value occurs in another table

我怎样才能 select 来自两列之一的值,其中值包含在另一个表中?

源表:

数据A 数据B
苹果 苹果
橙子 奥拉
松果 菠萝
计算机 ABCD123

检查条目的表:

数据C
苹果
橙子
菠萝

结果查询:

结果
苹果
橙子
菠萝

源表的第四个条目(Computer/ABCD123)无效,因为检查表中既不存在“Computer”也不存在“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;

没有成功。

尝试:

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_2019&fiddle=8b0a13a07ae245b00616bb24b0a972b0

一个简单的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;

UNION仅检索一次该值,即使它们存在于联合的两个部分中也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM