【问题标题】:MySQL: Using JOIN statement in a subqery [duplicate]MySQL:在 subqery 中使用 JOIN 语句 [重复]
【发布时间】:2020-04-02 14:00:41
【问题描述】:

可以用显式语法([INNER|LEFT|OUTER|..] JOIN...ON...)或在 WHERE 语句中指定条件来制定联接。

如何引用外部 FROM 语句中调用的表并在子查询中加入?

在这种情况下,我指的是具有别名 p 的表

SELECT 
    p.id,
    p.post_title,
    (SELECT 
            GROUP_CONCAT(DISTINCT wp_terms.name
                    SEPARATOR ',')
        FROM
            p
                JOIN
            wp_term_relationships ON (p.id = wp_term_relationships.object_id)
                LEFT JOIN
            wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
                LEFT JOIN
            wp_terms ON (wp_terms.term_id = wp_term_taxonomy.term_id)
                AND wp_term_taxonomy.taxonomy IN ('post_tag' , 'category'))
FROM
    `post_senza_revisioni` p
WHERE
    p.post_type = 'post'
        AND p.post_status = 'publish'
        AND p.post_parent = 0
GROUP BY id , post_title

【问题讨论】:

  • 您可以在子查询条件中使用 p 列,即相关子查询。但是你不能从 p 中选择。
  • 提供无效代码并不能告诉我们您想要什么,它没有任何意义。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。 PS p 是 post_senza_revisioni 的别名,您可以使用它。 PS 表别名不用于表示表的值,它用于表示该表中的任意行——因此我们点它以获得该行的特定列下的值。

标签: mysql sql join subquery


【解决方案1】:

我很确定你想要一个相关的子查询:

SELECT p.id, p.post_title,
       (SELECT GROUP_CONCAT(DISTINCT wp_terms.nameSEPARATOR ',')
        FROM wp_term_relationships tr
             wp_term_taxonomy tt
             ON tr.term_taxonomy_id = tt.term_taxonomy_id LEFT JOIN
              wp_terms t
              ON t.term_id = tt.term_id AND
                 tt.taxonomy IN ('post_tag' , 'category'))
        WHERE p.id = r.object_id
       )
FROM `post_senza_revisioni` p
WHERE p.post_type = 'post' AND
      p.post_status = 'publish' AND
      p.post_parent = 0;

我怀疑外部查询中需要GROUP BY,所以我删除了它。如果您在 p 表中确实有重复的 id 值,那么您可以将其重新添加 - 尽管这表明 id 是该列的一个非常糟糕的名称。

【讨论】:

    【解决方案2】:

    在不知道数据的情况下,我认为您应该能够在 FROM 子句中使用子查询,加入 ID,然后从子查询中选择 * 或您想要的列。

    SELECT 
        p.id,
        p.post_title,
        sub.*
    FROM
        `post_senza_revisioni` p
    
    JOIN    (SELECT 
                GROUP_CONCAT(DISTINCT wp_terms.name
                        SEPARATOR ',')
            FROM
                p
                    JOIN
                wp_term_relationships ON (p.id = wp_term_relationships.object_id)
                    LEFT JOIN
                wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
                    LEFT JOIN
                wp_terms ON (wp_terms.term_id = wp_term_taxonomy.term_id)
                    AND wp_term_taxonomy.taxonomy IN ('post_tag' , 'category')
            ) sub
    ON p.id = sub.id
    WHERE
        p.post_type = 'post'
            AND p.post_status = 'publish'
            AND p.post_parent = 0
    GROUP BY id , post_title 
    

    【讨论】:

    • 为什么您希望FROM P 在子查询中工作?
    • 复制粘贴出错,可以尝试引入 post_senza_revisioni。
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 2017-07-08
    • 2017-02-18
    • 1970-01-01
    • 2012-04-29
    • 2017-10-13
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多