用 SQL 连接 2 个表

Join 2 Tables together with SQL

我有一个 CustomerCustomer_2 table,我想将它们连接在一起:

两个 table 中都有数据,但是在与语句连接时,只返回列名而没有数据。我正在尝试使用以下连接语句:

select distinct * 
from Customer c 
join Customer_2 d on c.CUST_NUM = d.CUST_NUM  

这些是 table:

CREATE TABLE [Customer] 
(
    [CUST_NUM] [INT] NOT NULL,
    [CUST_LNAME] [VARCHAR](50) NULL,
    [CUST_FNAME] [VARCHAR](50) NULL,
    CUST_BALANCE [MONEY] NOT NULL, 
) ON [PRIMARY]

CREATE TABLE [Customer_2]  
(
    [CUST_NUM] [INT] NOT NULL,
    [CUST_LNAME] [VARCHAR](50) NULL,
    [CUST_FNAME] [VARCHAR](50) NULL, 
) ON [PRIMARY]

每个Table中的数据:

INSERT INTO Customer 
VALUES ('1000', 'Smith', 'Jeanne', '1050.11'),
       ('1001', 'Ortega', 'Juan', '840.92');

INSERT INTO CUSTOMER_2 
VALUES ('2000', 'McPherson', 'Anne'),
       ('2001', 'Ortega', 'Juan'),
       ('2002', 'Kowalski', 'Jan'),
       ('2003', 'Chan', 'George');

预期输出将 customer_2 组合到客户 table 的底部,对于客户 2 [ 的四个客户中的每一个,额外的列 CUST_BALANCE 为 0 或 null table.

我想发生的事情是您的连接条件从未满足,这意味着两个表不具有相同的 cust_name 尝试按左下​​连接进行调试

   select distinct * 
   from Customer c 
   Left join Customer_2 d on 
   c.CUST_NUM =
   d.CUST_NUM

试试这个:

select c.[CUST_NUM] , c.[CUST_BALANCE]
FROM INVOICE I
JOIN (
     SELECT CUST_NUM, CUST_BALANCE FROM Customer c 
     UNION
     SELECT CUST_NUM, NULL as CUST_BALANCE FROM Customer_2 d
   ) tbl t on i.cust_num = t.cust_num

您是否想获得每个客户的总发票金额?完成此操作的最简单方法是创建 Customer 和 Customer_2 的派生 table。在此示例中,我使用 cte 来执行此操作。然后就变成了一个简单的聚合得到总数。

with Customers as
(
    select CUST_NUM
        , CUST_LNAME
        , CUST_FNAME
    from Customer
    UNION ALL
    select CUST_NUM
        , CUST_LNAME
        , CUST_FNAME
    from Customer_2
)

select c.CUST_NUM
    , c.CUST_FNAME
    , c.CUST_LNAME
    , InvoiceTotal = SUM(i.INV_AMOUNT)
from Customers c
left join INVOICE i on i.CUST_NUM = c.CUST_NUM
group by c.CUST_NUM
    , c.CUST_FNAME
    , c.CUST_LNAME