Zapytanie pobierające dane z 2 tabel

0

Mam takie dwie tabelki w SQLite 3:

CREATE TABLE kody ( 
    grupa       INTEGER             NOT NULL, 
    nazwa       varchar(20)     NOT NULL, 
    kod_nume            INTEGER             NULL, 
    kod_znak            VARCHAR(20)     NULL,
    PRIMARY KEY ( grupa,nazwa ));

INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 1, '',   0, '');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 1, 'MultiBank',   1, 'MultiBank');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 1, 'BZWBK',   2, 'Bank Zachodni WBK');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 1, 'mBank',   3, 'mBank');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 1, 'GETinBANK', 4, 'GetinBank');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 1, 'Narodowy Bank Polski',   10, 'NBP');

INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 4, '',   0, '');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 4, 'Polski Złoty',   1, 'PLN');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 4, 'Frank Szwajcarski',   2, 'CHF');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 4, 'Waluta EURO',   3, 'EUR');
INSERT INTO Kody ( grupa, nazwa, kod_nume, kod_znak ) VALUES ( 4, 'Amerykański dolar',   4, 'USD');

CREATE TABLE kursy_walut (
    dzien               INTEGER     NOT NULL,
    miesiac     INTEGER     NOT NULL,
    rok             INTEGER     NOT NULL,
    bank                INTEGER     NOT NULL,
    kurs_sp     DOUBLE      NULL,
    waluta      INTEGER     NULL,
    spread      DOUBLE      NULL,
    PRIMARY KEY( dzien, miesiac, rok, bank ));

INSERT INTO kursy_walut ( waluta, bank, rok, miesiac, dzien, kurs_sp, spread ) VALUES ( 2, 4, 2011, 12, 30, 3.8473, 0.2506 );

chce wyciągnąć z obu tabel kurs z danego dnia w taki sposób aby zamiast banku i waluty z tabeli kursy_walut podstawiała mi się kod_znak z tabeli kody.
Napisałem:

SELECT kursy_walut.rok, kursy_walut.miesiac, kursy_walut.dzien, kody.kod_znak, kursy_walut.kurs_sp 
FROM  kursy_walut
INNER JOIN kody ON kody.kod_nume = kursy_walut.bank AND kody.grupa = 1
WHERE rok = 2011 AND miesiac = 12 and dzien = 30;

Działa.

SELECT kursy_walut.rok, kursy_walut.miesiac, kursy_walut.dzien, kody.kod_znak, kursy_walut.kurs_sp 
FROM  kursy_walut
INNER JOIN kody ON kody.kod_nume = kursy_walut.bank AND kody.grupa = 1
INNER JOIN kody ON kody.kod_nume = kursy_walut.waluta AND kody.grupa = 4
WHERE rok = 2011 AND miesiac = 12 and dzien = 30;

Jednak przy próbie wyjęcia z tabeli nazwy waluty pisze mi kody.kod_znak jest dwuznaczy. Proszę o pomoc z poprawieniem tego zapytania. Dzięki bardzo za pomoc.

0

ALIASY!!

0

W którym miejscu zastosować aliasy ? Bo jak piszę:

SELECT kursy_walut.rok, kursy_walut.miesiac, kursy_walut.dzien, kody.kod_znak AS Bank, kody.kod_znak AS Waluta, kursy_walut.kurs_sp 
FROM  kursy_walut
INNER JOIN kody ON Bank = kursy_walut.bank AND kody.grupa = 1
INNER JOIN kody ON Waluta = kursy_walut.waluta AND kody.grupa = 4
WHERE  rok = 2011 AND miesiac = 12 AND dzien = 30;

dostaje ten sam błąd.

0
SELECT kursy_walut.rok, kursy_walut.miesiac, kursy_walut.dzien, k1.kod_znak, kursy_walut.kurs_sp, k2.kod_znak
FROM  kursy_walut
INNER JOIN kody K1 ON k1.kod_nume = kursy_walut.bank AND k1.grupa = 1
INNER JOIN kody k2 ON k2.kod_nume = kursy_walut.waluta AND k2.grupa = 4
WHERE rok = 2011 AND miesiac = 12 AND dzien = 30;
0

Dziękuję bardzo za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0