我有以下表格
user
字段id
item
,也带有id字段positiverating
,其中包含字段customerid
和itemid
,如果用户对某个商品给出了隐含的正评价(例如已查看/购买/点击/ 。))我想选择字段user.id
,item.id
和rating
(布尔字段),以便每个用户和每个项目rating
都是true
iif positiverating
表中有一个条目,否则false
?
一些想法:
SELECT user.id, item.id from user, item
导致十字架
需要的产品。 positiveratings
或多或少是这样的交叉产品,但仅适用于评级商品假设有100000个项目和相同数量的用户,则生成的查询需要非常高效。我怀疑需要一些左/右连接,但我觉得有点卡住了。
更具体地说,我需要查询PostgreSQL。
答案 0 :(得分:1)
这是你在找什么?
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;