【问题标题】:MS-Access SQL Select one of two columns if value occurs in another tableMS-Access SQL 如果值出现在另一个表中,则选择两列之一
【发布时间】:2022-01-09 20:38:03
【问题描述】:

如何从两列之一中选择值,其中值包含在另一个表中?

源表:

DataA DataB
Apple Apple
Orange Ora
Pinea Pineapple
Computer ABCD123

要检查条目的表:

DataC
Apple
Orange
Pineapple

查询结果:

Result
Apple
Orange
Pineapple

源表的第四个条目(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;

没有成功。

【问题讨论】:

    标签: sql ms-access


    【解决方案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_2019&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;
      

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

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 2014-02-21
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多