我有三个具有这样的分层数据的表:
categories->feeds->channels,其中 feeds 具有 FK category_id,channels 具有 FK feed_id。
频道有一个布尔值,订阅。我想选择所有类别并创建一个订阅(布尔)列,如果其任何提要中的任何频道为“1”,则该列为“1”。我正在使用 SQLite。
首先我尝试了这个:
SELECT categories.category_id, categories.title,
CASE when (channels.subscribed = 1) THEN 1 ELSE 0 END AS subscribed
FROM categories
JOIN feeds ON categories.category_id = feeds.category_id
JOIN channels ON feeds.feed_id = channels.feed_id;
这给了我数据库中每个频道的所有类别,如果 channels.subscribed = 1,则 categories.subscribed = 1。但是,我只希望结果集中每个类别一次,如果有任何频道,则 categories.subscribed 为 1已订阅。所以我尝试使用 group by:
SELECT categories.category_id, categories.title,
CASE when (channels.subscribed = 1) THEN 1 ELSE 0 END AS subscribed
FROM categories
JOIN feeds ON categories.category_id = feeds.category_id
JOIN channels ON feeds.feed_id = channels.feed_id;
GROUP BY categories.category_id;
这给了我想要的结果集,但订阅的列不正确,可以预见:
id|title|subscribed
38|cat1|0
19|cat2|0
而我想要这个:
38|cat1|0
19|cat2|1
因为在 cat2 中有一个包含订阅频道的提要。有没有我可以使用的函数,或者我必须做出更复杂的 CASE 语句才能让它工作?感谢您的帮助和时间。