Odniesienie do tabeli SQL

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 :)

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
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');

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.

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;
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ś ;)

1

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

‘‘‘

0

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

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