Odniesienie do tabeli SQL

Odpowiedz Nowy wątek
2018-12-04 15:56
0

Witam wszystkich serdecznie! Przejdę Od razu do sedna sprawy : tworzę widok który posiada następującą składnie :

create view dyrektor_widok (d_imie,d_nazwisko,d_miejscowosc,d_pesel,d_numer_telefonu,d_stanowisko) as
select pracownik.p_imie,pracownik.p_nazwisko,pracownik.p_miejscowosc,pracownik.p_pesel,pracownik.p_numer,pracownik.p_id_stanowiska from pracownik,stanowisko
where pracownik.p_id_stanowiska=stanowisko.s_id_stanowiska;

Efektem takowej operacji jest następujący widok :
https://zapodaj.net/images/bacf6d259f304.png (przepraszam za osobny hosting lecz nie wyświetlało się to tutaj gdy skorzystałem z opcji "Obraz".

Jednak moją zagwozdką jest to jak rozwiązać problem wyświetlania ID stanowiska - chciałbym aby było wyświetlane w tym miejscu zamiast ID stanowiska to nazwa stanowiska przypisana odpowiedniemu pracownikowi.
Tabela pracownik oraz stanowisko wygląda następująco :
Pracownik:

create table pracownik(
p_id_pracownika int primary key IDENTITY(1, 1),
p_imie varchar(500),
p_nazwisko varchar(3000),
p_wyksztalcenie varchar(3000),
p_miejscowosc varchar(2000),
p_wojewodztwo varchar(3000),
p_pesel varchar(14),
p_ulica varchar(2000),
p_kod_pocztowy varchar(7),
p_numer varchar(10),
p_id_stanowiska int,
p_id_oddzialu int,
constraint fk_stanowisko foreign key (p_id_stanowiska) references stanowisko (s_id_stanowiska),
constraint fk_oddzial foreign key (p_id_oddzialu) references oddzial (o_id_oddzialu)
);

Stanowisko:

create table stanowisko(
s_id_stanowiska int primary key IDENTITY(1, 1),
s_nazwa_stanowiska varchar(3000),
s_opis_stanowiska varchar(3000)
);

Wie ktoś może jak rozwiązać ten problem? Nie wiem jakiej składni polecenia użyć aby to rozwiązać.Z góry dziękuje za pomoc :)

edytowany 4x, ostatnio: avabuy, 2018-12-04 15:58

Pozostało 580 znaków

2018-12-04 16:22
1

Zamień pracownik.p_id_stanowiska na stanowisko.s_nazwa_stanowiska.

Btw ta część

from pracownik,stanowisko
where pracownik.p_id_stanowiska=stanowisko.s_id_stanowiska

wygląda jakbyś robił naokoło JOINA 2 tabel. Nie chce mi się o tej porze myśleć czy wynik Twojego zapytania będzie zgodny z tym joinowanym, ale myślę że conajmniej ładniej, a może i poprawniej byłoby zrobić:

...
from pracownik
left join stanowisko ON pracownik.p_id_stanowiska=stanowisko.s_id_stanowiska
Tak sie robiło w Starym ansi stylu. Chyba do ansi sql 89. - Marcin.Miga 2018-12-04 16:27
a to sorka, nie wiedzialem - GoodVibesDev 2018-12-04 16:36

Pozostało 580 znaków

2018-12-04 16:29
0

Wyskoczył błąd :

Conversion failed when converting the varchar value 'Operator' to data type int.

Wartości w tabeli "stanowisko" wyglądają tak :

insert into stanowisko values ('Operator','Operator maszyny do wytłaczania blachodachówki');
insert into stanowisko values ('Dyrektor Produkcji','Nadzoruje prace pracowników');
insert into stanowisko values ('Księgowy','Zajmuje się finansami firmy');
insert into stanowisko values ('Prezes','Nadzoruje pracę całej firmy');
insert into stanowisko values ('Magazynier','Składuje blachodachówki w magazynie');
insert into stanowisko values ('Operator Wózka Widłowego','Pakowanie, rozładunek i załadunek towaru');
insert into stanowisko values ('Kasjer','Obsluga kasy fiskalnej');
insert into stanowisko values ('Elektryk','Instalacja oraz konsweracja urządzeń elektrycznych');
insert into stanowisko values ('Inspektor BHP','Zajmuje się bezpieczeństwem i higieną pracy w zakładzie');
moze usun view i stworz jeszcze raz? wyglada jakby juz zapamietalo te ostatnia kolumne jako integer - GoodVibesDev 2018-12-04 16:34

Pozostało 580 znaków

2018-12-04 16:36
0

GoodVibesDev - próbowałem już usunąć widok i stworzyć odnowa lecz nadal występuje ten sam błąd. Widok się tworzy lecz chcąc zobaczyć ten widok komendą "select *from" występuje ten błąd.

edytowany 1x, ostatnio: avabuy, 2018-12-04 16:37

Pozostało 580 znaków

2018-12-05 09:10
1

Masz błąd w insercie:

Conversion failed when converting the varchar value 'Operator' to data type int.

Musisz podać kolumny w insercie bo on chce wstawić wartość operator do pola s_id_stanowiska stąd błąd konwersji, zrób tak:

insert into stanowisko (s_nazwa_stanowiska,s_opis_stanowiska) values ('Dyrektor Produkcji','Nadzoruje prace pracowników');

co do głównego pytania to w widoku zrób tak:

alter view dyrektor_widok
as
select 
    pracownik.p_imie
    ,pracownik.p_nazwisko
    ,pracownik.p_miejscowosc
    ,pracownik.p_pesel
    ,pracownik.p_numer
    ,pracownik.p_id_stanowiska 
    ,stanowisko.s_nazwa_stanowiska
from 
    pracownik
    left join stanowisko on pracownik.p_id_stanowiska=stanowisko.s_id_stanowiska;

Pozostało 580 znaków

2018-12-06 17:44
0

Działa świetnie, dziękuje! :) a czy jest możliwość napisania tego jeszcze inaczej? Bo chciałbym do tego dodać jeszcze oddział i nazwę oddziału a nie wiem jak to zrobić według tego co napisałeś ;)

edytowany 2x, ostatnio: avabuy, 2018-12-06 17:53

Pozostało 580 znaków

2018-12-06 22:18

Zakładam, że masz to podobnie jak że stanowiskiem:

SELECT 
    pracownik.p_imie
    ,pracownik.p_nazwisko
    ,pracownik.p_miejscowosc
    ,pracownik.p_pesel
    ,pracownik.p_numer
    ,pracownik.p_id_stanowiska 
    ,stanowisko.s_nazwa_stanowiska
   ,Oddzial.o_nazwa_oddzialu
FROM 
    pracownik
    LEFT JOIN stanowisko ON pracownik.p_id_stanowiska=stanowisko.s_id_stanowiska
    Left join oddzial on pracownik.p_id_oddzialu = oddział.id

‘‘‘

edytowany 1x, ostatnio: Panczo, 2018-12-06 22:19

Pozostało 580 znaków

2018-12-07 12:00
0

Świetnie! Dziękuje wielkie za pomoc! :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot