MySQL:在另一个子查询中使用子查询结果

时间:2015-11-05 07:50:26

标签: mysql subquery

我需要在Wordpress安装中执行以下MySQL查询:

  1. 获取类别名称为“Oppskrifter”的类别ID。
  2. 获取所有这些ID的子类别。
  3. 获取由此产生的子类别(即2岁的孩子和1岁的孙子女)的孩子。
  4. 我正在尝试使用带有别名的子查询来解决这个问题,但我无法使其工作,也不确定这是最好的方法。这是我目前的看法:

    SELECT * FROM
    (
        SELECT term_id AS oppskrifter_id
        FROM wp_terms WHERE name = "Oppskrifter"
    ) AS R1,
    (
        SELECT * FROM wp_terms AS t
        INNER JOIN wp_term_taxonomy AS tt
            ON tt.term_id = t.term_id
        WHERE tt.taxonomy = "category" AND tt.parent IN (R1)
    ) AS R2;
    

    第一个子查询本身就可以正常工作,但是当引入第二个子查询时,它不知道R1是什么,因此我得到了错误ERROR 1054 (42S22): Unknown column 'R1' in 'having clause'。如果我将R1替换为实际查询SELECT term_id AS oppskrifter_id FROM wp_terms WHERE name = "Oppskrifter",则会收到错误消息ERROR 1060 (42S21): Duplicate column name 'term_id'

    我在这里想要做的是在第二个查询中获取孩子(子弹点2),然后使用这些结果为孙子们做同样的事情。

    我有什么选择来解决这个问题?有哪些正确的方法,包括速度和可读性?

1 个答案:

答案 0 :(得分:1)

在所有3个表格上使用Join

注意:将wp_grand_child替换为实际的表名,将wg.term_id替换为实际的字段名

SELECT wt.term_id AS oppskrifter_id, wtt.term_id AS child_id, wg.term_id AS grand_child_id
FROM wp_terms AS wt
JOIN wp_term_taxonomy AS wtt ON wtt.term_id = wt.term_id
JOIN wp_grand_child AS wg ON wg.term_id = wtt.term_id
WHERE wt.name = "Oppskrifter"
AND wtt.taxonomy = "category"