Mysql
如何結合 UNION 和 INNER JOIN?
我正在獲取樹中所有節點的祖父母,如下所示:
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
,但有一些 whereparent=0
,表示樹的根。此查詢不會獲取這些行,因為沒有祖父母可以加入它們。我希望返回那些行,與0
(orNULL
)parent
和gp_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 );