Baza adresów, złożone zapytanie left join

0

Temat problemu:
Dostałem jako zadanie opracować bazę danych. Wydaje mi się, że wszystko jest już w porządku jeśli chodzi o same tabele, natomiast nie potrafię wyświetlić wszystkich danych adresowych. Oto treść zapytania, które do tej pory skonstruowałem i które działa. Proszę o pomoc w wypisaniu reszty adresu.:

select nazwisko, imie, wiek, email, TYPY.nazwa as typ_maila, telefon, T.nazwa as typ_numeru from klienci 
left join EMAIL on EMAIL.ID_klienci =  klienci.ID_klienci
left join EMAIL_TYPY on EMAIL_TYPY.ID_emaile = EMAIL.ID_emaile
left join TYPY on TYPY.ID_typy = EMAIL_TYPY.ID_typy
left join TELEFONY on TELEFONY.ID_klienci = klienci.ID_klienci 
left join TELEFON_TYPY on TELEFON_TYPY.ID_telefony = TELEFONY.ID_telefony
left join TYPY T on T.ID_typy = TELEFON_TYPY.ID_typy

Założenia:
Baza danych adresów powinna zawierać:
imię, nazwisko, wiek,
telefony:

  • z podziałem na prywatne służbowe, itd
  • może być unikatowy lub wspólny dla kilku osób
  • dla jednych może być prywatny a dla innych służbowy,
    maile:
  • z podziałem na prywatne służbowe, itd
  • może być unikatowy lub wspólny dla kilku osób
  • dla jednych może być prywatny a dla innych służbowy,
    adresy:
  • dla jednych może być zamieszkania a dla innych firmowy a dla jeszcze innych adresem wysyłkowym.
  • dla innych to może być adres ze zarówno zamieszkania jak i firmowy jak i wysyłkowy( wszystkie typy )

adres powinien zawierać:
kraj, województwo, miejscowość, ulice, kody pocztowe

  • dane te powinny mieć swoje własne tabele, jak kraj, województwo itd, a następnie powinny być powiązane jedną tabelą, która będzie zawierała id usera.
  • kraje powinny być powiązane z województwami w jednej tabeli

Kraje, miejscowości itd rozdzielamy aby uniknąć powielania danych. To najważniejszy punkt w tym zadaniu.

Typy adresów powinny znaleźć się osobnej tabeli
Typy maili / telefonów powinny znaleźć się w osobnej tabeli ( to jedna wspólna tabela dla m i t )

Napisać relacje między tabelami
Napisać zapytanie złożone z left join aby wypisać wszystkie dane klienta.

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for adresy
-- ----------------------------
DROP TABLE IF EXISTS `adresy`;
CREATE TABLE `adresy` (
  `id_adresy` int(11) NOT NULL AUTO_INCREMENT,
  `id_wojewodztwa` int(11) DEFAULT NULL,
  `id_miejscowosci` int(11) NOT NULL,
  `id_ulice` int(11) NOT NULL,
  `numer_mieszkania` int(11) NOT NULL,
  `kod_pocztowy` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_adresy`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of adresy
-- ----------------------------
INSERT INTO `adresy` VALUES ('1', '1', '1', '1', '25', '30-079');
INSERT INTO `adresy` VALUES ('2', '2', '2', '2', '55', '33-303');
INSERT INTO `adresy` VALUES ('3', '1', '3', '3', '22', '68-600');

-- ----------------------------
-- Table structure for adresy_baza
-- ----------------------------
DROP TABLE IF EXISTS `adresy_baza`;
CREATE TABLE `adresy_baza` (
  `id_adresybaza` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id_klienci` int(11) NOT NULL,
  `id_adresy` int(11) NOT NULL,
  `id_adresytypy` int(11) NOT NULL,
  PRIMARY KEY (`id_adresybaza`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of adresy_baza
-- ----------------------------
INSERT INTO `adresy_baza` VALUES ('1', '1', '1', '1');
INSERT INTO `adresy_baza` VALUES ('2', '2', '2', '2');

-- ----------------------------
-- Table structure for adresy_typy
-- ----------------------------
DROP TABLE IF EXISTS `adresy_typy`;
CREATE TABLE `adresy_typy` (
  `id_typyadresy` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `adresytypy_nazwa` varchar(255) NOT NULL,
  PRIMARY KEY (`id_typyadresy`,`adresytypy_nazwa`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of adresy_typy
-- ----------------------------
INSERT INTO `adresy_typy` VALUES ('1', 'zamieszkania');
INSERT INTO `adresy_typy` VALUES ('2', 'firmowy');
INSERT INTO `adresy_typy` VALUES ('3', 'wysyłkowy');

-- ----------------------------
-- Table structure for email
-- ----------------------------
DROP TABLE IF EXISTS `email`;
CREATE TABLE `email` (
  `id_emaile` int(11) NOT NULL AUTO_INCREMENT,
  `id_klienci` int(11) NOT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id_emaile`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of email
-- ----------------------------
INSERT INTO `email` VALUES ('1', '1', '[email protected]');
INSERT INTO `email` VALUES ('2', '2', '[email protected]');
INSERT INTO `email` VALUES ('3', '3', '[email protected]');
INSERT INTO `email` VALUES ('4', '2', '[email protected]');

-- ----------------------------
-- Table structure for email_typy
-- ----------------------------
DROP TABLE IF EXISTS `email_typy`;
CREATE TABLE `email_typy` (
  `id_typy` int(11) NOT NULL DEFAULT '0',
  `id_emaile` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id_typy`,`id_emaile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of email_typy
-- ----------------------------
INSERT INTO `email_typy` VALUES ('0', '0');
INSERT INTO `email_typy` VALUES ('1', '1');
INSERT INTO `email_typy` VALUES ('1', '4');
INSERT INTO `email_typy` VALUES ('2', '2');
INSERT INTO `email_typy` VALUES ('2', '3');

-- ----------------------------
-- Table structure for klienci
-- ----------------------------
DROP TABLE IF EXISTS `klienci`;
CREATE TABLE `klienci` (
  `id_klienci` int(11) NOT NULL AUTO_INCREMENT,
  `imie` varchar(50) NOT NULL,
  `nazwisko` varchar(50) NOT NULL,
  `wiek` int(3) NOT NULL,
  `pesel` int(11) NOT NULL,
  PRIMARY KEY (`id_klienci`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of klienci
-- ----------------------------
INSERT INTO `klienci` VALUES ('1', 'Jan', 'Kowalski', '22', '5235452');
INSERT INTO `klienci` VALUES ('2', 'Anna', 'Nowak', '18', '5362124');
INSERT INTO `klienci` VALUES ('3', 'Marek', 'Kamiński', '15', '536228');

-- ----------------------------
-- Table structure for kraje
-- ----------------------------
DROP TABLE IF EXISTS `kraje`;
CREATE TABLE `kraje` (
  `id_kraje` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa_kraju` varchar(255) NOT NULL,
  PRIMARY KEY (`id_kraje`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of kraje
-- ----------------------------
INSERT INTO `kraje` VALUES ('1', 'Polska');
INSERT INTO `kraje` VALUES ('2', 'Słowacja');
INSERT INTO `kraje` VALUES ('3', 'Francja');
INSERT INTO `kraje` VALUES ('4', 'Niemcy');
INSERT INTO `kraje` VALUES ('5', '');

-- ----------------------------
-- Table structure for miejscowosc
-- ----------------------------
DROP TABLE IF EXISTS `miejscowosc`;
CREATE TABLE `miejscowosc` (
  `id_miejscowosc` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa_miejscowosci` varchar(255) NOT NULL,
  PRIMARY KEY (`id_miejscowosc`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of miejscowosc
-- ----------------------------
INSERT INTO `miejscowosc` VALUES ('1', 'Kraków');
INSERT INTO `miejscowosc` VALUES ('2', 'Warszawa');
INSERT INTO `miejscowosc` VALUES ('3', 'Sosnowiec');
INSERT INTO `miejscowosc` VALUES ('4', 'Bratysława');
INSERT INTO `miejscowosc` VALUES ('5', '');

-- ----------------------------
-- Table structure for telefon_typy
-- ----------------------------
DROP TABLE IF EXISTS `telefon_typy`;
CREATE TABLE `telefon_typy` (
  `id_typy` int(11) NOT NULL,
  `id_telefony` int(11) NOT NULL,
  PRIMARY KEY (`id_typy`,`id_telefony`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of telefon_typy
-- ----------------------------
INSERT INTO `telefon_typy` VALUES ('1', '1');
INSERT INTO `telefon_typy` VALUES ('1', '4');
INSERT INTO `telefon_typy` VALUES ('2', '2');
INSERT INTO `telefon_typy` VALUES ('2', '3');

-- ----------------------------
-- Table structure for telefony
-- ----------------------------
DROP TABLE IF EXISTS `telefony`;
CREATE TABLE `telefony` (
  `id_telefony` int(11) NOT NULL AUTO_INCREMENT,
  `id_klienci` int(11) NOT NULL,
  `telefon` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_telefony`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of telefony
-- ----------------------------
INSERT INTO `telefony` VALUES ('1', '1', '698721566');
INSERT INTO `telefony` VALUES ('2', '2', '554654512');
INSERT INTO `telefony` VALUES ('3', '3', '698255444');
INSERT INTO `telefony` VALUES ('4', '3', '889888777');

-- ----------------------------
-- Table structure for typy
-- ----------------------------
DROP TABLE IF EXISTS `typy`;
CREATE TABLE `typy` (
  `id_typy` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_typy`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of typy
-- ----------------------------
INSERT INTO `typy` VALUES ('1', 'prywatny');
INSERT INTO `typy` VALUES ('2', 'sluzbowy');

-- ----------------------------
-- Table structure for typy_adresy
-- ----------------------------
DROP TABLE IF EXISTS `typy_adresy`;
CREATE TABLE `typy_adresy` (
  `id_typyadresy` int(11) NOT NULL,
  `typ_adresy` varchar(50) NOT NULL,
  PRIMARY KEY (`id_typyadresy`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of typy_adresy
-- ----------------------------
INSERT INTO `typy_adresy` VALUES ('1', 'prywatny');
INSERT INTO `typy_adresy` VALUES ('2', 'firmowy');
INSERT INTO `typy_adresy` VALUES ('3', 'wysyłkowy');

-- ----------------------------
-- Table structure for ulice
-- ----------------------------
DROP TABLE IF EXISTS `ulice`;
CREATE TABLE `ulice` (
  `id_ulice` int(11) NOT NULL,
  `nazwa_ulicy` varchar(255) NOT NULL,
  PRIMARY KEY (`id_ulice`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of ulice
-- ----------------------------
INSERT INTO `ulice` VALUES ('0', 'Poznańska');
INSERT INTO `ulice` VALUES ('1', 'Dukielska');
INSERT INTO `ulice` VALUES ('2', 'Kijowska');
INSERT INTO `ulice` VALUES ('3', 'Zakopiańska');
INSERT INTO `ulice` VALUES ('4', 'Nowosądecka');

-- ----------------------------
-- Table structure for wojewodztwa
-- ----------------------------
DROP TABLE IF EXISTS `wojewodztwa`;
CREATE TABLE `wojewodztwa` (
  `id_wojewodztwa` int(11) NOT NULL AUTO_INCREMENT,
  `nazwa_wojewodztwa` varchar(255) NOT NULL,
  `id_kraje` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id_wojewodztwa`,`id_kraje`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of wojewodztwa
-- ----------------------------
INSERT INTO `wojewodztwa` VALUES ('1', 'Małopolskie', '1');
INSERT INTO `wojewodztwa` VALUES ('2', 'Mazowieckie', '1');
INSERT INTO `wojewodztwa` VALUES ('3', 'Wielkopolskie', '1');
INSERT INTO `wojewodztwa` VALUES ('4', 'Kosicky', '2');
INSERT INTO `wojewodztwa` VALUES ('5', 'Presovsky', '2');

0

nie do konca rozumiem z czym masz problem, czemu nie isc schematem ktory zastosowales w swoim zapytaniu i zrobic nastepne left join z adresy_baza, potem adresy itd. ?

0

No właśnie do końca nie wiem jak to złączyć poprzez adresy_baza :(

1

'klienci' z 'adresy_baza' po 'id_klienci', potem 'adresy_baza' z 'adresy' po 'id_adresy' itd

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