首页 > 解决方案 > 根据特定列连接/合并来自两个不相关表的记录

问题描述

我有两张桌子:

这两个表在我的数据库中没有通过 FK 约束相关。

这些表包含共享相同信息的项目,我希望根据这些信息加入/联合它们:UPC 和 EAN 列

我试过做一个这样的简单查询:

select * 
from Items as It join TDItems as tdi
on it.UPC=tdi.UPC and it.EAN=tdi.EAN

此查询返回“一些”结果,但是当我合并两个查询时,如下所示:

  select * 
    from Items as It join TDItems as tdi
    on it.UPC=tdi.UPC 

    UNION -- important part I guess?

    select * 
    from Items as It join TDItems as tdi
    on it.EAN=tdi.EAN 

第一个查询返回 504 个结果,第二个查询返回 709 个结果...

所以我的问题是:

  1. 为什么第一个查询应该相同时返回较少的结果?
  2. 我将如何进行此查询,以便它返回它找到的行数(即 504、600 或任何可能的数字?)

有人可以帮我为这些问题写一个正确的查询吗?

编辑:

嘿@Gordon 我已经重写了内部连接

select * 
from Items as It join TDItems as tdi
on it.UPC=tdi.UPC OR it.EAN=tdi.EAN

这是否是让商品在 UPC 或 EAN 上匹配的解决方案(即不必是匹配的 UPC 和 EAN 对)

标签: sqlsql-serversql-server-2005inner-joinunion

解决方案


UNION更像是一个OR

查询将更像 UNION

select * 
from Items as It 
join TDItems as tdi
  on it.UPC = tdi.UPC 
  or it.EAN = tdi.EAN

推荐阅读