[英]Using mysql aliases to select columns from 2 tables
我有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_a
中的每一行都直接與table_b
每一行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;
您需要一個可用於連接這兩個表的列。
你可以嘗試生成一個偽列作為行號,但我不確定它是你想要實現的。 這看起來應該是這樣的(現在可以測試一下,但想法很清楚):
SELECT
a.open, b.open
FROM
(SELECT
open, @curRow := @curRow + 1 AS row_number
FROM
table_a
JOIN
(SELECT @curRow := 0)
) a
JOIN
(SELECT
open, @curRow := @curRow + 1 AS row_number
FROM
table_b
JOIN
(SELECT @curRow := 0)
) b
ON
a.row_number = b.row_number
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.