繁体   English   中英

SQL 比较来自两个表的数据,然后如果条件从不同的列返回值

[英]SQL compare data from two tables then return value from different column if conditions

  • 环境: MS Access
  • 技术领域: SQL/查询
  • 情况:

    我有 2 张桌子,tblA,tblB。 tblA 包含 9000 个产品信息 ==> SKU、UPC tblB 包含制造商 1500 个产品信息 ==> sku、UPC 问题是 tblA 上的 UPC 有:空白、损坏的​​ UPC 和良好的 UPC。 我怎样才能:

    1. 如果 tblA!UPC 为空,则从 tblB 查找并更新好的 UPC
    2. 确定 tblA 上的 UPC 是否已损坏(例如:812440000000、8450+11),然后在 tblB 上查找匹配的 UPC。 如果未找到匹配项,则返回“空白”
    3. 如果在 tblB 上找不到匹配的 UPC,则在 tblA 上保持良好的 UPC

我希望在 tblA 上更新好的 UPC,而不仅仅是将其视为查询。

谢谢你们!

我创建了一些这样的示例数据(如果示例数据的设置不正确,请告诉我):

create table tblA
(
    sku varchar(25),
    upc varchar(25)
)
go
create table tblB
(
    sku varchar(25),
    upc varchar(25)
)
go

insert into tblA values ('sku1', null)
insert into tblB values ('sku1', 'correct upc #1!')
insert into tblA values ('sku2', 'CORRUPT UPC!')
insert into tblB values ('sku2', 'correct upc #2!')
insert into tblA values ('sku3', 'CORRUPT UPC WITH NO MATCH!')

然后我运行这些更新命令:

首先,对于你的观点#1:

update tblA set upc = tblB.upc
from tblA
inner join tblB on tblA.sku = tblB.sku and tblA.upc is null

那么对于你的观点#2:

update tblA set upc = isnull(tblB.upc, '')
from tblA
left join tblB on tblA.sku = tblB.sku 
where tblA.upc like 'CORRUPT%' 
-- you'll need to specify the actual criteria that makes a upc corrupted,
-- and replace the "like 'CORRUPT%'" clause!

之后,这个查询:

select * from tblA

给你:

--sku   upc
--sku1  correct upc #1!
--sku2  correct upc #2!
--sku3  <blank>

tblA 中的任何(未损坏的)upc 在 tblB 中没有相应的 sku 将被单独留下。 这会让你走上正轨吗?

暂无
暂无

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

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