gpt4 book ai didi

mysql - 使用 mysql 别名从 2 个表中选择列

转载 作者:可可西里 更新时间:2023-11-01 06:43:58 24 4
gpt4 key购买 nike

我有 2 个表:table_a 和 table_b。两者都包含一个名为“open”的列。

table_a
+-------+
| open |
+-------+
| 36.99 |
| 36.85 |
| 36.40 |
| 36.33 |
| 36.33 |
+-------+

table_b
+------+
| open |
+------+
| 4.27 |
| 4.46 |
| 4.38 |
| 4.22 |
| 4.18 |
+------+

我想编写一个返回以下内容的查询

+-------++------+
| open || open |
+-------++------+
| 36.99 || 4.27 |
| 36.85 || 4.46 |
| 36.40 || 4.38 |
| 36.33 || 4.22 |
| 36.33 || 4.18 |
+-------++------+

我尝试以下查询:

select a.open, b.open from  table_a a, table_b b;

这将返回一个表,其中每个 table_a.open 的值对应 table_b.open 的每个值

+-------++------+
| open || open |
+-------++------+
| 36.99 || 4.27 |
| 36.99 || 4.46 |
| 36.99 || 4.38 |
| 36.99 || 4.22 |
| ... || 4.18 |
+ ... ++------+

我可以看出我误解了别名的正确用法。有什么想法吗?

最佳答案

这不是您遇到的别名问题。您正在执行 CROSS JOIN在创建笛卡尔结果集的表上。

这会乘以您的结果集,因此 table_a 中的每一行都直接匹配到 table_b 中的每一行。

如果您想将表JOIN 在一起,那么您需要一些列来连接表。

如果您有一个要JOIN 的列,那么您的查询将是:

select a.open as a_open,
b.open as b_open
from table_a a
inner join table_b b
on a.yourCol = b.yourCol

如果您没有可用于连接的列,那么您可以创建一个用户定义的变量来执行此操作,这将为每一行创建一个行号。

select 
a.open a_open,
b.open b_open
from
(
select open, a_row
from
(
select open,
@curRow := @curRow + 1 AS a_row
from table_a
cross join (SELECT @curRow := 0) c
) a
) a
inner join
(
select open, b_row
from
(
select open,
@curRow := @curRow + 1 AS b_row
from table_b
cross join (SELECT @curRow := 0) c
) b
) b
on a.a_row = b.b_row;

参见 SQL Fiddle with Demo

关于mysql - 使用 mysql 别名从 2 个表中选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190706/

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