7

我有两张数据表。两个表都有一CUSTOMER_ID列(数字)。我正在尝试获取所有唯一值的列表,CUSTOMER_ID 知道两个表中是否CUSTOMER_ID存在或仅存在一个(以及哪一个)。

我可以很容易地得到一个独特的列表CUSTOMER_ID

SELECT tblOne.CUSTOMER_ID
FROM tblOne.CUSTOMER_ID
UNION
SELECT tblTwo.CUSTOMER_ID
FROM tblTwo.CUSTOMER_ID

我不能只在SELECTstatemtn 中添加一个标识符列(例如:),SELECT tblOne.CUSTOMER_ID, "Table1" AS DataSource因为这样记录就不会是唯一的,它会同时获得两组数据。

我觉得我需要在这个查询中的其他地方添加它,但不知道如何。

为清楚起见进行编辑:

对于联合查询输出,我需要一个额外的列,它可以告诉我我看到的唯一值是否存在于:(1)两个表,(2)表一或(3)表二。

4

3 回答 3

12

如果 CUSTOMER_ID 出现在两个表中,那么我们将不得不任意选择哪个表来调用源。在这种情况下,以下查询使用“tblOne”作为 [SourceTable]:

SELECT
    CUSTOMER_ID,
    MIN(Source) AS SourceTable,
    COUNT(*) AS TableCount
FROM
    (
        SELECT DISTINCT
            CUSTOMER_ID, 
            "tblOne" AS Source
        FROM tblOne
    UNION ALL
        SELECT DISTINCT
            CUSTOMER_ID,
            "tblTwo" AS Source
        FROM tblTwo
    )
GROUP BY CUSTOMER_ID
于 2013-10-25T14:29:19.567 回答
3

戈德汤普森的回答是正确的。但是,没有必要在子查询中做一个 distinct。并且,您可以返回包含您要查找的信息的单列:

select customer_id,
       iif(min(which) = max(which), min(which), "both") as DataSource
from (select customer_id, "tblone" as which
      from tblOne
      UNION ALL
      select customer_id, "tbltwo" as which
      from tblTwo
     ) t
group by customer_id
于 2013-11-03T19:37:54.260 回答
2

我们可以添加一个整数数据类型的标识符列,然后进行外部查询:

SELECT 
CUSTOMER_ID,
sum(Table)

FROM 
(
SELECT 
  DISTINCT CUSTOMER_ID, 
  1 AS Table
FROM tblOne
UNION
SELECT 
  DISTINCT CUSTOMER_ID,
  2 AS Table
FROM tblTwo
)
GROUP BY CUSTOMER_ID` 

因此,如果“总和为 1”,那么它来自 tableOne,如果它是 2,那么它来自 tableTwo,如果它是 3,那么它存在于两者中

如果你想在联合中添加第三个表,那么给它一个值 4 以便你应该为每个组合有一个唯一的总和

于 2015-12-28T17:38:39.587 回答