8

table_a と table_b の 2 つのテーブルがあります。どちらにも「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 |
+   ... ++------+

ここでエイリアスの適切な使用法を誤解していることがわかります。何か案は?

4

2 に答える 2

7

エイリアスの問題ではありません。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 を参照してください

于 2013-03-03T20:54:51.357 に答える
2

その 2 つのテーブルを結合するために使用できる列が必要です。

行番号として疑似列を生成してみることができますが、それがあなたが達成しようとしているものかどうかはわかりません。これは次のようになります (すぐにテストできますが、アイデアは明確です)。

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
于 2013-03-03T20:59:10.880 に答える