oracle sql - 查找在两个用户之间购买的常用项目

TPR*_*TPR 1 sql oracle

Item - Id,Name,
PurchaseLog - Id,ItemId,CustomerId,PurchaseDate User - Id,UserName

对于给定的两个客户的用户名,找到他们去年购买的普通商品的名称.

这是天真的(甚至是正确的)?:

select distinct item.id, item.name
from item i, PurchaseLog log_username1, PurchaseLog log_username2,  user user1, user user2
where lower(user1.username) = lower('UserName1') AND
      lower(user2.username) = lower('UserName2') AND
      log_username1.itemid = log_username2.itemid AND
      log_username2.itemid = i.itemid AND
      log_username1 >-- satisfy date contraint AND
      log_username2 >-- satisfy date contraint
Run Code Online (Sandbox Code Playgroud)

taw*_*man 8

您描述了交叉点查询的基本要求.

select item.id, item.name
from item, PurchaseLog p, user u
where lower(u.username) = lower('Username1')
AND p.user_id = u.user_id
and item.id = p.itemid
and p.purchasedate between SYSDATE and SYSDATE-365
INTERSECT
select item.id, item.name
from item, PurchaseLog p, user u
where lower(u.username) = lower('Username2')
AND p.user_id = u.user_id
and item.id = p.itemid
and p.purchasedate between SYSDATE and SYSDATE-365
Run Code Online (Sandbox Code Playgroud)

这将返回为两个用户显示的item.id和item.name列表.