将if语句添加到Oracle查询中

时间:2015-11-10 15:29:13

标签: sql oracle

如果more than 2行有一定的ID.,我有一个需要返回单行的查询我认为最好的方法是在查询中添加一个计数器来计算x的实例,然后返回结果if x >=2,但我不确定Oracle中的结果。

我的查询现在返回所有xplaylists的所有实例。我需要它才能返回播放列表,只要它有超过2个x

的实例
Select * from PLAYLIST p
left join PLAYLIST_SONGS ps on p.PLAYLIST_ID = ps.PLAYLIST_ID
join SONG s on ps.SONG_ID = s.SONG_ID
join Artists art on s.ARTIST_ID = art.ARTIST_ID
where art.BAND='x'
and p.NUM_SONGS >=2; 

3 个答案:

答案 0 :(得分:1)

如果您想获得包含某首艺术家的2首或更多首歌曲的播放列表,这样的内容可能会帮助您:

SELECT *
FROM playlist p
WHERE (SELECT COUNT(1)
       FROM playlist_songs ps JOIN song s ON ps.song_id = s.song_id
       JOIN artists art ON s.artist_id = art.artist_id
       WHERE ps.playlist_id = p.playlist_id
       AND art.band = 'X') >= 2

答案 1 :(得分:1)

这是一个概念,有一个和一个分组来获取带有计数的歌曲>注意,在这种情况下,字段1,2,3,4不得使您想要组合的记录唯一。否则,pablomatico的方法可以起作用

Select Field1, Field2, Field3, Field4
from PLAYLIST p
left join PLAYLIST_SONGS ps on p.PLAYLIST_ID = ps.PLAYLIST_ID
join SONG s on ps.SONG_ID = s.SONG_ID
join Artists art on s.ARTIST_ID = art.ARTIST_ID
where art.BAND='x'
GROUP BY Field1, Field2, Field3, Field4
HAVING count(PS.Song_ID)  >=2 

您还可以通过为每首歌曲分配行号来使用分析功能(窗口功能),例如覆盖分区。类似于row_number()的东西(由song_Id分区)

答案 2 :(得分:0)

另一种解决方案是使用内联相关视图来获取歌曲数量:

$main = array_unique(file("main.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
$trim = array_unique(file("trim.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));

foreach ($trim as $m) {
    $main[] = sprintf("new featuredProduct('', '%s'),", $m);
}
$res = array_unique($main);

echo implode("<br>", $res);
相关问题