我目前有4个SQL表,如下所示:
CustomersTable,RegistrationTable,OrdersTable和OffersTable
我需要编写一个SELECT语句来检索CustomersTable(所有字段)中包含与RegistrationTable匹配的行的所有客户或者与OrdersTable匹配且状态为“已关闭”的行,结果表中不应显示重复客户。
如您所知,CustomersTable和RegistrationTable具有共同的“customerId”字段,但在CustomersTable和OrdersTable之间没有共同的字段。但是,还有另一个表(OffersTable),其中包含“customerId”和“ID”字段,分别用于查询Customers和Orders表的信息。请记住,出现在OfferTable中的客户不一定会出现在OrderTable中,或者状态不是“已关闭”
因此,基于上面的示例表,如果我要运行查询,它将返回以下结果:
在结果表中不应显示重复的客户。 我非常感谢你的帮助。 谢谢你的时间!!
注意 - 我正在使用MySQL
答案 0 :(得分:0)
考虑到你想要的,我会想exists
或in
。您对该表的描述有点麻烦 - 这就是为什么问题中的样本数据非常有用的原因。
生成的查询看起来像这样:
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'