我有这些表
Customer (Customer_ID(PK), Joined_date, FirstName, LastName, Location)
Seller (Seller_ID, Customer_ID(Fk)) and Buyer(Buyer_ID, Customer_ID(FK))
我只需要展示2016年1月1日之后加入的买家和卖家,并且该人不应该两次出售物品并购买物品。
SELECT * FROM
(
SELECT BUYER_FirstName, BUYER_LastName, SELLER_ID
FROM BUYER AS BUY
UNION
SELECT SELLER_FirstNAME,Seller_LastName, BUYER_ID
FROM SELLER AS SELL
) WHERE JOINED_DATE > TO_DATE('01-01-2016', 'MM-DD-YYYY')
ORDER BY JOINED_DATE;
我正走在正确的轨道上吗?实际上我必须在概念上基于ER Diagram运行这些查询。
答案 0 :(得分:1)
你可能会扭曲你的方法来得到答案。但是,我更倾向于从客户表开始(假设买卖双方都是客户)。
select c.*
from customers c
where c.join_date >= '2016-01-01' and
exists (select 1 from buyers b where b.customer_id = c.customer_id) and
exists (select 1 from sellers s where s.customer_id = c.customer_id);
注意:在Oracle中,您需要将date
放在日期常量之前。
这样就重新提出了这样一个问题,即让自今年第一年起加入的客户同时进行购买和销售。