有没有最好的方法来连接多个表
Is there a best way to join multiple tables
有人可以帮助 joining/merging table 如下所示。
如果部门列(depart_1、depart_2、depart_3)在一个 table 中,我知道该怎么做。但无法实现这种情况,因为它们处于不同的 tables.
我有将近 100 个字段,比如部门,所以也不太关心性能。
通过使用 JOIN
和 UNION
SELECT
id, name gender, 1 as seq, depart_1 as department
FROM tab 1
UNION
SELECT
id, name gender, 2 as seq, depart_2 as department
FROM tab 1
UNION
SELECt
tab1.id, tab2.name, tab1.gender, 3 as seq, tab2.depart_3 as department
FROM tab2 JOIN tab1 on tab2.id = tab1.id
UNION
SELECt
tab1.id, tab2.name, tab1.gender, 4 as seq, tab2.depart_4 as department
FROM tab2 JOIN tab1 on tab2.id = tab1.id
UNION
SELECT
tab1.id, tab3.name, tab1.gender, 5 as seq, tab3.depart_5 as department
FROM tab3 JOIN tab1 on tab3.id = tab1.id
UNION
SELECT
tab1.id, tab3.name, tab1.gender, 6 as seq, tab3.depart_6 as department
FROM tab3 JOIN tab1 on tab3.id = tab1.id
每次查询读取一个部门信息。因此,您可以在每个查询中为 seq 列使用静态数字。
最好先进行所有联合,然后在最后执行较小的连接。
SELECT tab.id,
tab.name,
gen.gender,
tab.seq,
tab.deparment
FROM
(SELECT id, name, 1 as seq, depart_1 as department FROM tab 1
UNION
SELECT id, name , 2 as seq, depart_2 as department FROM tab 1
UNION
SELECT id, name, 3 as seq, depart_3 as department FROM tab 2
UNION
SELECT id, name , 4 as seq, depart_4 as department FROM tab 2) tab LEFT JOIN
(SELECT DISTINCT id,gender FROM tab1 ) gen ON tab.id=gen.id
由于您是在配置单元中执行此操作,这将自动执行映射端连接,这将使您的查询更快。
有人可以帮助 joining/merging table 如下所示。
如果部门列(depart_1、depart_2、depart_3)在一个 table 中,我知道该怎么做。但无法实现这种情况,因为它们处于不同的 tables.
我有将近 100 个字段,比如部门,所以也不太关心性能。
通过使用 JOIN
和 UNION
SELECT
id, name gender, 1 as seq, depart_1 as department
FROM tab 1
UNION
SELECT
id, name gender, 2 as seq, depart_2 as department
FROM tab 1
UNION
SELECt
tab1.id, tab2.name, tab1.gender, 3 as seq, tab2.depart_3 as department
FROM tab2 JOIN tab1 on tab2.id = tab1.id
UNION
SELECt
tab1.id, tab2.name, tab1.gender, 4 as seq, tab2.depart_4 as department
FROM tab2 JOIN tab1 on tab2.id = tab1.id
UNION
SELECT
tab1.id, tab3.name, tab1.gender, 5 as seq, tab3.depart_5 as department
FROM tab3 JOIN tab1 on tab3.id = tab1.id
UNION
SELECT
tab1.id, tab3.name, tab1.gender, 6 as seq, tab3.depart_6 as department
FROM tab3 JOIN tab1 on tab3.id = tab1.id
每次查询读取一个部门信息。因此,您可以在每个查询中为 seq 列使用静态数字。
最好先进行所有联合,然后在最后执行较小的连接。
SELECT tab.id,
tab.name,
gen.gender,
tab.seq,
tab.deparment
FROM
(SELECT id, name, 1 as seq, depart_1 as department FROM tab 1
UNION
SELECT id, name , 2 as seq, depart_2 as department FROM tab 1
UNION
SELECT id, name, 3 as seq, depart_3 as department FROM tab 2
UNION
SELECT id, name , 4 as seq, depart_4 as department FROM tab 2) tab LEFT JOIN
(SELECT DISTINCT id,gender FROM tab1 ) gen ON tab.id=gen.id
由于您是在配置单元中执行此操作,这将自动执行映射端连接,这将使您的查询更快。