Mysql

如何結合 UNION 和 INNER JOIN?

  • October 28, 2021

我正在獲取樹中所有節點的祖父母,如下所示:

SELECT P.id, P.parent, GP.parent gp_id FROM product_groups P             
INNER JOIN product_groups GP ON P.parent = GP.id

表中沒有 with 條目id=0,但有一些 where parent=0,表示樹的根。此查詢不會獲取這些行,因為沒有祖父母可以加入它們。我希望返回那些行,與0(or NULL)parentgp_id.

我本來打算用UNION的第二個表(0,0),但無法弄清楚語法。這個怎麼做?

只是做一個LEFT JOIN

SELECT P.id, P.parent, GP.parent gp_id FROM product_groups P             
LEFT JOIN product_groups GP ON P.parent = GP.id

這將返回所有行,P並且任何不匹配的行都GP將具有NULL值。

SELECT P.id, P.parent, 
      GP.parent, GP.gp_id 
 FROM product_groups P             
      INNER JOIN product_groups GP
         ON P.parent = GP.id
UNION
SELECT P.id, P.parent, 
      0 AS GP.parent, 0 AS gp_id 
 FROM product_groups P
WHERE NOT EXISTS (
                  SELECT * 
                    FROM product_groups GP 
                   WHERE P.parent = GP.id
                 );

引用自:https://dba.stackexchange.com/questions/15399