Mam dwie tabele: konto i pracownik. Tabela konto zawiera login, hasło i klucz główny. W tabeli pracownik są dane osobiste i klucz główny z tabeli konto. Schemat tabel podaje na końcu posta..
Żeby pobrać dane użytkownika wydaję zapytanie:
SELECT konto.konto_id, login, haslo, kto, imie, nazwisko, numer, dzial FROM konto, pracownik WHERE login='janek' AND konto.konto_id=pracownik.konto_id;
Taki jest poprawny sposób (wiżę obie tabele - podręcznikowy przykład). Ale ku mojemu zdziwieniu jak dam coś takiego:
SELECT konto.konto_id, login, haslo, kto, imie, nazwisko, numer, dzial FROM konto, pracownik WHERE login='janek';
To też działa poprawnie i nawet szybciej. W MySQL 4.x nie przeszedłby ten patent.
Wiecie dlaczego MySQL sam sprawdza sobie powiązania?
TABELE:
CREATE TABLE konto ( konto_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, login VARCHAR(15) NOT NULL, haslo CHAR(40) NOT NULL, kto TINYINT NOT NULL ) TYPE = InnoDB; CREATE TABLE pracownik ( pracownik_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, konto_id INT NOT NULL, imie VARCHAR(20) NOT NULL, nazwisko VARCHAR(25) NOT NULL, numer INT NOT NULL, dzial CHAR(3) NOT NULL, CONSTRAINT FOREIGN KEY(konto_id) REFERENCES konto(konto_id) ) TYPE = InnoDB;