Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: INNER JOIN kiedy klucz obcy ma inna nazwe
Forum PHP.pl > Forum > Bazy danych > MySQL
ten_typ
Mam problem z zapytaniem z użyciem inner joina.
  1. -- -----------------------------------------------------
  2. -- Table `db`.`kurs`
  3. -- -----------------------------------------------------
  4. CREATE TABLE IF NOT EXISTS `db`.`kurs` (
  5. `id_kursu` INT NOT NULL AUTO_INCREMENT ,
  6. `nazwa_kursu` VARCHAR(30) NOT NULL ,
  7. PRIMARY KEY (`id_kursu`) )
  8. ENGINE = InnoDB;
  9.  
  10. -- -----------------------------------------------------
  11. -- Table `db`.`grupa`
  12. -- -----------------------------------------------------
  13. CREATE TABLE IF NOT EXISTS `db`.`grupa` (
  14. `id_grupy` INT NOT NULL AUTO_INCREMENT ,
  15. `nazwa_grupy` VARCHAR(30) NOT NULL ,
  16. `zajecia_1` VARCHAR(12) NOT NULL ,
  17. `godzina_1` TIME NOT NULL ,
  18. `zajecia_2` VARCHAR(12) NOT NULL ,
  19. `godzina_2` TIME NOT NULL ,
  20. `opis_grupy` VARCHAR(300) NOT NULL ,
  21. PRIMARY KEY (`id_grupy`) )
  22. ENGINE = InnoDB;
  23.  
  24. -- -----------------------------------------------------
  25. -- Table `db`.`kurs_grupy`
  26. -- -----------------------------------------------------
  27. CREATE TABLE IF NOT EXISTS `db`.`kurs_grupy` (
  28. `id_kurs_grupy` INT NOT NULL AUTO_INCREMENT ,
  29. `id_kurs` INT NOT NULL ,
  30. `id_grupy` INT NOT NULL ,
  31. PRIMARY KEY (`id_kurs_grupy`) ,
  32. INDEX `id_kurs` (`id_kurs` ASC) ,
  33. INDEX `id_grupy` (`id_grupy` ASC) ,
  34. CONSTRAINT `id_kurs`
  35. FOREIGN KEY (`id_kurs` )
  36. REFERENCES `db`.`kurs` (`id_kursu` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
  37. CONSTRAINT `id_grupy`
  38. FOREIGN KEY (`id_grupy` )
  39. REFERENCES `db`.`grupa` (`id_grupy` ) ON DELETE NO ACTION ON UPDATE NO ACTION)
  40. ENGINE = InnoDB;


Zapytanie wygląda tak:

  1. SELECT nazwa_grupy, nazwa_kursu FROM grupa INNER JOIN kurs_grupy USING (id_grupy) INNER JOIN kurs USING (id_kurs);


Niestety wywala błąd:
ERROR 1054 (42S22): Nieznana kolumna 'id_kurs' w from clause.

Próbowałem zamiast id_kurs dać id_kursu i też to samo. Gdzie mam błąd?

Ok rozwiązałem problem:

  1. SELECT kurs.nazwa_kursu, grupa.nazwa_grupy FROM kurs JOIN kurs_grupy ON kurs.id_kursu=kurs_grupy.id_kurs JOIN grupa ON kurs_grupy.id_grupy=grupa.id_grupy;
kaminskp
Cytat(ten_typ @ 4.01.2009, 14:40:10 ) *
Mam problem z zapytaniem z użyciem inner joina.
  1. -- -----------------------------------------------------
  2. -- Table `db`.`kurs`
  3. -- -----------------------------------------------------
  4. CREATE TABLE IF NOT EXISTS `db`.`kurs` (
  5. `id_kursu` INT NOT NULL AUTO_INCREMENT ,
  6. `nazwa_kursu` VARCHAR(30) NOT NULL ,
  7. PRIMARY KEY (`id_kursu`) )
  8. ENGINE = InnoDB;
  9.  
  10. -- -----------------------------------------------------
  11. -- Table `db`.`grupa`
  12. -- -----------------------------------------------------
  13. CREATE TABLE IF NOT EXISTS `db`.`grupa` (
  14. `id_grupy` INT NOT NULL AUTO_INCREMENT ,
  15. `nazwa_grupy` VARCHAR(30) NOT NULL ,
  16. `zajecia_1` VARCHAR(12) NOT NULL ,
  17. `godzina_1` TIME NOT NULL ,
  18. `zajecia_2` VARCHAR(12) NOT NULL ,
  19. `godzina_2` TIME NOT NULL ,
  20. `opis_grupy` VARCHAR(300) NOT NULL ,
  21. PRIMARY KEY (`id_grupy`) )
  22. ENGINE = InnoDB;
  23.  
  24. -- -----------------------------------------------------
  25. -- Table `db`.`kurs_grupy`
  26. -- -----------------------------------------------------
  27. CREATE TABLE IF NOT EXISTS `db`.`kurs_grupy` (
  28. `id_kurs_grupy` INT NOT NULL AUTO_INCREMENT ,
  29. `id_kurs` INT NOT NULL ,
  30. `id_grupy` INT NOT NULL ,
  31. PRIMARY KEY (`id_kurs_grupy`) ,
  32. INDEX `id_kurs` (`id_kurs` ASC) ,
  33. INDEX `id_grupy` (`id_grupy` ASC) ,
  34. CONSTRAINT `id_kurs`
  35. FOREIGN KEY (`id_kurs` )
  36. REFERENCES `db`.`kurs` (`id_kursu` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
  37. CONSTRAINT `id_grupy`
  38. FOREIGN KEY (`id_grupy` )
  39. REFERENCES `db`.`grupa` (`id_grupy` ) ON DELETE NO ACTION ON UPDATE NO ACTION)
  40. ENGINE = InnoDB;


Zapytanie wygląda tak:

  1. SELECT nazwa_grupy, nazwa_kursu FROM grupa INNER JOIN kurs_grupy USING (id_grupy) INNER JOIN kurs USING (id_kurs);


Niestety wywala błąd:
ERROR 1054 (42S22): Nieznana kolumna 'id_kurs' w from clause.

Próbowałem zamiast id_kurs dać id_kursu i też to samo. Gdzie mam błąd?

Ok rozwiązałem problem:

  1. SELECT kurs.nazwa_kursu, grupa.nazwa_grupy FROM kurs JOIN kurs_grupy ON kurs.id_kursu=kurs_grupy.id_kurs JOIN grupa ON kurs_grupy.id_grupy=grupa.id_grupy;



Jak wygląda u Ciebue INSERT ?
ten_typ
zależy jaki dokładnie ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.