使用两个表

时间:2017-07-22 14:11:45

标签: mysql sql

我目前有4个SQL表,如下所示:

CustomersTable,RegistrationTable,OrdersTable和OffersTable

enter image description here

我需要编写一个SELECT语句来检索CustomersTable(所有字段)中包含与RegistrationTable匹配的行的所有客户或者与OrdersTable匹配且状态为“已关闭”的行,结果表中不应显示重复客户。

如您所知,CustomersTable和RegistrationTable具有共同的“customerId”字段,但在CustomersTable和OrdersTable之间没有共同的字段。但是,还有另一个表(OffersTable),其中包含“customerId”和“ID”字段,分别用于查询Customers和Orders表的信息。请记住,出现在OfferTable中的客户不一定会出现在OrderTable中,或者状态不是“已关闭”

因此,基于上面的示例表,如果我要运行查询,它将返回以下结果:

enter image description here

在结果表中不应显示重复的客户。 我非常感谢你的帮助。 谢谢你的时间!!

注意 - 我正在使用MySQL

2 个答案:

答案 0 :(得分:0)

考虑到你想要的,我会想existsin。您对该表的描述有点麻烦 - 这就是为什么问题中的样本数据非常有用的原因。

生成的查询看起来像这样:

select c.*
from customers c
where exists (select 1 from registrations r where r.customerid = c.customerid) or
      exists (select 1
              from offers o join
                   orders oo
                   on o.id = oo.orderid
              where o.customerid = c.customerid and
                    oo.status = 'closed'
             );

列名可能不太正确。

答案 1 :(得分:0)

尝试使用" Union"和"内部联接"每张桌子如下:

 Select Customers.* from Customers inner join Registration on Customers. customerId= Registration.customerId

 union

Select Customers.* from Customers inner join offers on Customers.customerId=offers.customerId 
inner join Orders on orders.Id= offers.Id and Orders.Status='closed'