我想要像下面的单个表一样的行
id name parentId
我当前的表是(它们之间的键是外键)
category
id name
是所有父项 和
subcategory
id name catId
最后一个表是活动
activity
id name subcatId
对于category表的parentId,它将是空的,因为category是所有表的父级
到目前为止,我的尝试均未成功
样本数据
category
C-1 HR null
C-2 Development null
subcategory
SC-1 Hiring C-1
SC-2 Admin C-1
SC-3 Developer C-2
activity
A-1 College Hiring SC-1
A-2 Job Fair SC-1
A-3 Java Development SC-3
Result Needed
1 HR null
2 Development null
3 Hiring C-1
4 Admin C-1
5 Developer C-2
6 College SC-1
7 Job Fair SC-1
8 Java Development SC-3
我希望情况更清楚。如果您需要任何更多信息,请告诉我 谢谢
我尝试2张桌子
select name
from (
select c.name
from category c
union all
select b.name
from subcategory b
inner join category ca
on ca.id = b.parentId
)
我说错了
每个派生表必须具有自己的别名
我是否需要在查询中添加以下行
start with parent_id is null
connect by prior id = parent_id
答案 0 :(得分:2)
尝试这样的事情:
SELECT @id := @id + 1 AS id, name, parent_id
FROM ( SELECT name, NULL AS parent_id FROM category
UNION ALL
SELECT id, name, catId FROM subcategory
UNION ALL
SELECT id, name, parentId FROM activity
) q,
( SELECT @id := 0 ) w;
UNION ALL
来连接多个查询的结果。UNION
中,第一个查询的列名称用作结果集的列名称。@id
和赋值运算符:=
来生成列ID
的计算值。LIMIT
或OFFSET
,则列id
的值将不一致。答案 1 :(得分:0)
实际上,这样应该可以解决您的问题:
select name
from (
select c.name
from category c
union all
select b.name
from subcategory b
inner join category ca
on ca.id = b.parentId
) A -- alias is required for sub-query.
您可以将任何内容设置为别名,只要它不会与某些MySQL保留字冲突即可。您也可以) AS A
这样设置。
对于您而言,我认为没有必要进行子查询或内部联接。如果您确实希望结果是这样,则可以使用union all:
SELECT name,'' as ID from category
UNION ALL
SELECT name,catId FROM subcategory
UNION ALL
SELECT name,subcatId FROM activity;