Odniesienie do tabeli SQL

Odniesienie do tabeli SQL
AV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
0

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

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

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

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

GV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 11
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ć:

Kopiuj
...
from pracownik
left join stanowisko ON pracownik.p_id_stanowiska=stanowisko.s_id_stanowiska
AV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
0

Wyskoczył błąd :

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

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

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

AV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
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.

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3890
1

Masz błąd w insercie:

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

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

Kopiuj
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;
AV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
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ś ;)

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3890
1

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

Kopiuj
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

‘‘‘

AV
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 79
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.