一个布尔专栏中,我有三个表与分层数据是这样的:SQL语句来创建基于外国表的布尔列
分类 - > Feed中,>,其中饲料具有FK CATEGORY_ID和渠道渠道有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;
这给了我所有类别数据库中的每一个通道,与categories.subscribed = 1,如果channels.subscribed = 1。然而,我只是想一次每个类别在结果集中,具有类别。如果任何频道订阅,则订阅为1。所以,我想通过使用组:
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语句,我必须使这个语句正常工作?感谢您的帮助和时间。
这产生了正确的输出,但我的也是如此。这比我的回答好吗? “更好”,因为这是在android平台上执行的,所以我猜内存使用率或整体效率?你怎么看?另一个问题是我必须将其转换为ContentProvider,并且直接连接比子选择更容易... – d370urn3ur