【问题标题】:How can I add a join to this bulky SQL union statement?如何向这个庞大的 SQL 联合语句添加连接?
【发布时间】:2011-07-05 12:02:31
【问题描述】:

我有一个语句,根据链接表的共享标签和扬声器的数量对项目进行排名,但我希望它也能够从主 tbl_talks 中提取 talk_title 和 talk_brief 信息,这实际上不在查询中现在(仅使用链接表)。 基本上链接表有talk_id和tag_id或talk_id和speaker_id。

我尝试了几种尝试 LEFT JOIN 的方法,或者在应用联合但没有运气的成对 SELECT 中添加 tbl_talks。我需要将 tbl_linking_talk_tag.talk_id 和 tbl_linking_speakers_talk 与 tbl_talks.talk_id 相关联,然后从 tbl_talks 中获取talk_title 和talk_brief

SELECT talk_id, count(*) AS common_term_count FROM 
      (
      SELECT talk_id FROM tbl_linking_talk_tag WHERE tag_id IN 
         (SELECT tag_id FROM tbl_linking_talk_tag WHERE talk_id = 1)
      UNION ALL 
      SELECT talk_id FROM tbl_linking_speakers_talk WHERE speaker_id IN
         (SELECT speaker_id FROM tbl_linking_speakers_talk WHERE talk_id = 1)
       ) AS accumulator_table

 WHERE talk_id != 1 

 GROUP BY talk_id

 ORDER BY common_term_count DESC

【问题讨论】:

    标签: mysql join union relational-database inner-join


    【解决方案1】:

    在这种情况下,您不需要工会。如果您只需要计数,那么为什么不尝试类似..

    选择talk_id, (SELECT count(*) FROM tbl_linking_talk_tag sub WHERE tag_id IN (SELECT tag_id FROM tbl_linking_talk_tag WHERE talk_id = 1) and maintalk.talk_id=sub.talk_id) + (SELECT count(*) FROM tbl_linking_speakers_talk sub1 WHERE speaker_id IN (SELECT speaker_id FROM tbl_linking_speakers_talk WHERE talk_id = 1) 和 maintalk.talk_id=sub1.talk_id ),talk_title,talk_brief 来自主讲 其中talk_id != 1 按talk_id分组

    语法可能需要一些修正,但方法是

    从主表中选择列

    【讨论】:

      【解决方案2】:

      我得到了它与这个代码一起工作:

       SELECT a.talk_id, a.talk_image, a.talk_title, a.talk_brief, count(b.talk_id)  AS common_term_count 
              FROM tbl_talks a LEFT OUTER JOIN
                   (
                   SELECT talk_id FROM tbl_linking_talk_tag WHERE tag_id IN 
                      (SELECT tag_id FROM tbl_linking_talk_tag WHERE talk_id = 1)
                   UNION ALL 
                   SELECT talk_id FROM tbl_linking_speakers_talk WHERE speaker_id IN
                      (SELECT speaker_id FROM tbl_linking_speakers_talk WHERE talk_id = 1) 
                   ) AS b
                   ON a.talk_id = b.talk_id       
              WHERE a.talk_id != 1        
              GROUP BY b.talk_id      
              ORDER BY common_term_count DESC
      

      【讨论】:

        猜你喜欢
        • 2019-05-04
        • 2012-04-22
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多