2013-03-03 14 views
5

Mam 2 tabele: table_a i table_b. Oba zawierają kolumnę o nazwie "open".Używanie aliasów mysql do wybierania kolumn z 2 tabel

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 | 
+------+ 

Chciałbym napisać kwerendę, która zwraca następujące

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

próbuję następujące zapytanie:

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

ta zwraca tablicę z każdej wartości table_b.open dla każdej wartości table_a.open

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

Widzę, że nie rozumiem właściwego użycia aliasów tutaj. Jakieś pomysły?

+0

spróbuj tego: jak wybrać a.open OPEN_Askontaktuj, b.open jak open_b od table_a a, table_b b; – MUG4N

+0

nadal pobiera wszystkie wartości table_b.open dla każdej wartości table_a.open. table_a.open wydaje się przesuwać do następnej wartości tylko po wydrukowaniu obok każdej wartości table_b.open – rocketas

+0

Czy masz kolejną kolumnę, do której możesz dołączyć? –

Odpowiedz

6

To nie jest problem aliasu, który masz. Wykonujesz CROSS JOIN na tabeli, która tworzy kartezjański zestaw wyników.

Powoduje to pomnożenie zestawu wyników, więc każdy wiersz z table_a jest dopasowywany bezpośrednio do każdego wiersza w table_b.

Jeśli chcesz JOIN tabel razem, to potrzebujesz pewnej kolumny, aby dołączyć do tabel na.

Jeśli masz kolumnę JOIN sprawie, a następnie zapytanie będzie:

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 

Jeśli nie masz kolumny, które mogą być stosowane do łączenia na, wówczas można utworzyć zmienną zdefiniowaną przez użytkownika w tym celu utworzymy numer wiersza dla każdego wiersza.

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; 

Zobacz SQL Fiddle with Demo

+0

Ah Widzę. Czy istnieje sposób obejścia tego? – rocketas

+0

@holiday_cannibalism Czy masz inną kolumnę, w której można by się przyłączyć? – Taryn

+0

@holiday_cannibalism Zobacz moją edycję, możesz użyć zmiennej zdefiniowanej przez użytkownika, aby wygenerować wartość do przyłączenia się do tabel. – Taryn

2

Trzeba kolumny, które mogą być stosowane do łączenia, że ​​dwie tabele.

Możesz spróbować wygenerować pseudokolumnę jako numer wiersza, ale nie jestem pewien, czy to właśnie chcesz osiągnąć. Powinno to wyglądać tak, że (może przetestować go teraz, ale idea jest jasna):

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 
+0

Rzeczywiście miałem inną kolumnę (datę) i używam – rocketas

+0

. Pokaż cały schemat dla obu tabel i powiedz nam, jak zdecydować, które wiersze powinny być połączone. – MarcinJuraszek

+0

'wybierz a.open jako open_a, b.open jako open_b z table_a a, table_b b, gdzie a.date = b.date' dało prawidłowy wynik. Nie wiedziałem, że możesz to zrobić z numerem wiersza. Dzięki. – rocketas

Powiązane problemy