gpt4 book ai didi

mysql - 如何从具有不同列的多个表中获取组合列值

转载 作者:行者123 更新时间:2023-11-29 23:28:57 25 4
gpt4 key购买 nike

我正在尝试合并三个表中的多个列。我可以使用 UNION ALL 关键字来做到这一点,但我觉得我使用的这个查询可能不是最有效的

例如:

create table tbl1
(id int, act varchar(50), stk varchar(50), price int, vol int, amt float);
insert into tbl1 values
(1, 'a1', 's1', 10, 5, 50),
(2, 'a1', 's2', 5, 5, 25),
(3, 'a2', 's1', 15, 3, 45),
(4, 'a2', 's2', 20, 2, 40),
(5, 'a2', 's2', 20, 2, 40);

create table tbl2 (id int, tid int, price int, vol int, amt float);
insert into tbl2 values
(1, 1, 5, 3, 15),(2, 1, 5, 1, 5),(3, 1, 15, 1, 15),
(4, 2, 5, 3, 15),(5, 2, 6, 2, 12);

create table tbl3 (id int, act varchar(10), type int, amt float);
insert into tbl3 values
(1, 'a1', 0, 10),(2, 'a1', 1, 15),
(3, 'a2',1, 5),(4, 'a3',0, 5);`

我使用的查询

SELECT act,stk,amtFROM tbl1
UNION ALL
SELECT
(select act from tbl1 where tbl2.tid = tbl1.id) amt,
(select stk from tbl1 where tbl2.tid = tbl1.id) stk,
amt
from tbl2

有没有办法在不使用内部选择查询两次的情况下获得相同的结果?有人可以给我有效的查询吗?

这是 Fiddle

预期输出(来自所有三个表的 amt,其中 act='a1')

ACT     STK     AMT
a1 s1 50
a1 s2 25
a1 s1 15
a1 s1 5
a1 s1 15
a1 s1 10
a1 s1 15

最佳答案

只需使用显式连接:

SELECT act, stk, amt
FROM tbl1

UNION ALL

SELECT t1.act as amt, t1.stk, t2.amt
from tbl2 join
tbl1
on tbl2.tid = tbl1.id;

关于mysql - 如何从具有不同列的多个表中获取组合列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26726991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com