不可否认,这个头衔不是最好的,但我不知道怎么回答......
我正在使用Postgres的Sequel宝石。我有一个包含播放列表和曲目的数据库,我已经按特定属性过滤了曲目(因此,我有一部分曲目)。
然后我使用Playlists.where(tracks: filtered_tracks)
将播放列表过滤到包含曲目子集的播放列表。
但是,是否可以仅从曲目子集中选择具有两个或更多曲目的播放列表?比如Playlists.where(tracks: filtered_tracks, at_least: 2)
。
答案 0 :(得分:1)
最终答案的一些指示...
我假设您的表的定义方式与此类似:
CREATE TABLE playlists
(
playlist_id integer PRIMARY KEY,
playlist_name text
) ;
CREATE TABLE playlists_x_tracks
(
playlist_id integer,
track text,
PRIMARY KEY (playlist_id, track)
) ;
我们用一些数据填充它们:
INSERT INTO playlists (playlist_id, playlist_name)
VALUES
(1, 'list 1'),
(2, 'list 2');
INSERT INTO playlists_x_tracks (playlist_id, track)
VALUES
(1, 'track a'),
(1, 'track b'),
(1, 'track c'),
(1, 'track d'),
(2, 'track a'),
(2, 'track e') ;
使用SQL,并假设您的filtered_tracks将跟踪','跟踪b'并跟踪x'通过执行以下查询,您可以得到所需的答案:
SELECT
*
FROM
playlists
WHERE
(SELECT
count(*)
FROM
playlists_x_tracks
WHERE
playlists_x_tracks.playlist_id = playlists.playlist_id
AND track in ('track a', 'track b', 'track x')
) >= 2 ;
此SQL语句如何以及是否可以"反向翻译"续集我不确定。我真的不知道如何使用Sequel在WHERE中添加SELECT。但是,您可以随时利用Sequel将允许您直接使用自定义SQL的事实,这意味着您可以实际编写SQL语句并执行它。