如何实现子查询以选择与三个主题中的两个主题匹配的行?

栏目: 十大 · 发布时间: 2021-05-07

简介  这篇文章主要介绍了如何实现子查询以选择与三个主题中的两个主题匹配的行?以及相关的经验技巧,文章约1981字,浏览量3444,点赞数3,值得参考!

我如何找到不带set运算符的完全覆盖三个不同SQL系统中的两个的书籍。我正在使用三个主题ID“ SSRV”,“ ORA”,“ MySQL”,并且需要输出三个中的两个。例如,这本书可能有一个SSRV主题和一个ORA主题,但没有MySQL。这些主题的任何两个组合足以通过我们的过滤器。

我要显示符合此测试的book_id和书名。

  SELECT book_id
       , title
    FROM a_bkinfo.books B
   WHERE book_id IN (
       SELECT book_id
         FROM a_bkinfo.book_topics BT
    WHERE topic_id = 'SSRV' )
  AND book_id IN (
       SELECT book_id
         FROM a_bkinfo.book_topics BT
    WHERE topic_id = 'ORA' )
  AND book_id IN (
       SELECT book_id
         FROM a_bkinfo.book_topics BT
    WHERE topic_id = 'MySQL' )
  AND book_id IN (
        SELECT COUNT(*) 
                   FROM (  
                       SELECT book_id
                           ,  count(topic_id) AS topics
                         FROM a_bkinfo.book_topics BT 
                        GROUP BY book_id
                        HAVING count(topic_id) = 2
                        ) t 
              ;  

更新版本:

   SELECT book_id
 , title
 FROM a_bkinfo.books B
 WHERE book_id IN (
       SELECT book_id
         FROM a_bkinfo.book_topics BT
    WHERE topic_id ='SSRV'
        OR topic_id ='ORA' )
AND book_id IN (
        SELECT book_id
          FROM a_bkinfo.book_topics BT
    WHERE topic_id ='SSRV' 
        OR topic_id ='MySQL')
AND book_id IN (
        SELECT book_id
          FROM a_bkinfo.book_topics BT
    WHERE topic_id ='ORA' 
        OR topic_id ='MySQL');
答案
SELECT b.book_id, b.title, COUNT(*) FROM books b
INNER JOIN book_topics bt ON (b.book_id = bt.book_id)
GROUP BY b.book_id, b.title
HAVING COUNT(*) = 2

如果在book_topics中每个书-主题关系只有一行,这将起作用。这些对也必须是唯一的。如果您的数据不符合要求,则需要更复杂的查询。更新因为book_id是唯一的标识符,所以新版本是:

SELECT b.book_id FROM books b
INNER JOIN book_topics bt ON (b.book_id = bt.book_id)
GROUP BY b.book_id
HAVING COUNT(topic_id) = 2

要求与上述相同。


以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

WPF实现主题更换的简单DEMO

如何进行主题阅读(示例代码)

查询改写(Query Rewrite)方法总结(示例代码)

自然语言处理-主题模型(示例代码)

表单主题 - 在n block_name匹配时添加代码(示例代码)

用于在列1中选择与第2列中的两个模式之一匹配的值对的SQL查询

单元测试:为了测试值随时间的变化而返回可观察数据以返回主题的模拟服务导致TS抛出TS2339

主题模式(示例代码)