我有以下表格
user字段的用户表iditem,也包含一个id字段customerid和itemid的表customerid和itemid,如果用户对某一项给予了隐含的正面评价(例如看到/购买/单击/.(它)我希望选择字段user.id、item.id和rating (布尔字段),这样对于每个用户和每一项rating都是true in,在positiverating表中有一个条目,否则就是false。
一些想法:
SELECT user.id, item.id from user, item产生所需的交叉产品。positiveratings或多或少是一种交叉产品,但只适用于额定项目。假设有100000个条目和相同数量的用户,结果的查询需要非常有效。我怀疑一些左右联合是必要的,但我觉得有点卡住了。
更具体地说,我需要对PostgreSQL进行查询。
发布于 2014-05-25 15:54:21
这就是你要找的吗?
select u.userid, i.itemid, (pr.itemid is not null)
from user u cross join
item i left outer join
positiverating pr
on pr.userid = u.userid and pr.itemid = i.itemid;这假定positiverating表中没有重复的用户/项组合。
如果positiverating中有副本,则可以使用group by。但是,我建议改用exists。我认为下列措施会奏效:
select u.userid, i.itemid,
exists (select 1 from postivierating where pr.userid = u.userid and pr.itemid = i.itemid)
from user u cross join
item i;https://stackoverflow.com/questions/23857132
复制相似问题