簡體   English   中英

使用mysql別名從2個表中選擇列

[英]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;

請參閱SQL Fiddle with Demo

您需要一個可用於連接這兩個表的列。

你可以嘗試生成一個偽列作為行號,但我不確定它是你想要實現的。 這看起來應該是這樣的(現在可以測試一下,但想法很清楚):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM