gpt4 book ai didi

sql - 当记录不存在时忽略 WHERE 子句

转载 作者:行者123 更新时间:2023-12-04 08:03:54 25 4
gpt4 key购买 nike

我知道有很多具有类似标题的主题,但它们似乎与其他案例有关。我有3张 table :

song:
id
title


playlist_song:
id
song_id
playlist_id


stats_record:
id
type // enum SONG_LIKED/SONG_DISLIKED/...
user_id
entity_id // id of an entity stats record refers to
我使用 playlist_song 将歌曲存储在播放列表中,使用 stats_record 来记录播放/喜欢/不喜欢等内容。
我有一个功能,我想向用户展示他们从不喜欢或不喜欢的歌曲。意思是 stats_record 要么不存在,要么它的类型 != SONG_LIKED/SONG_DISLIKED (对于那个特定用户!)
但是,当我尝试构建此查询时,它也会显示其他用户从未喜欢过的歌曲(我只关心当前用户)。我的查询如下所示:
select s.title, sr.type 
from song s
left join playlist_song ps on ps.song_id = s.id
left join stats_record sr on sr.entity_id = ps.id
where ps.playlist_id = 'a686e0da-750f-11eb-9da1-bf79c63bacf7'
and ((sr.user_id = 'a26e23b4-7483-11eb-986b-5fc23c9ef85c'
and (not sr.type = 'SONG_LIKED'
and not sr.type = 'SONG_DISLIKED')) or sr.id is null);
我想要实现的是“如果 stats_record 存在,请检查它是否不是 SONG_LIKED/DISLIKED,否则忽略”

最佳答案

我还没有测试过这个,但我认为反加入会起作用:

select s.title, sr.type 
from song s
left join playlist_song ps on ps.song_id = s.id
where
ps.playlist_id = 'a686e0da-750f-11eb-9da1-bf79c63bacf7' and
not exists (
select null
from stats_record sr
where
sr.entity_id = ps.id and
sr.user_id = 'a26e23b4-7483-11eb-986b-5fc23c9ef85c' and
sr.type in ('SONG_LIKED', 'SONG_DISLIKED') -- this might be unnecessary
)
这个构造也非常有效,并且可以容忍重复,尽管我认为在这个例子中你不会有任何重复。
假设这有效,请尝试省略最后一个 where 子句( sr.type in... )。我不认为你会需要它。

关于sql - 当记录不存在时忽略 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66317163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com