Jak odroznic czy wiersz jast dydaktykiem czy studentem jesli dziedzicza po osobie

0

Schemat przesylam w zalaczniku. Zadanie dotyczy MSSQL-a.

W jednym poleceniu odczytaj imiona i nazwiska studentów i dydaktyków. W wierszu
studenta powinien pojawić się tekst Student, w wierszu dydaktyka Dydaktyk. Wynik
powinien być umieszczony w jednej kolumnie

SELECT CONCAT(imie,' ',nazwisko,' ',) FROM Osoby;

Jak moge odroznic czy wiersz jast dydaktykiem czy studentem

0
SELECT CONCAT(imie,' ',nazwisko,' ',) FROM Studenci;

SELECT CONCAT(imie,' ',nazwisko,' ',) FROM Dydaktycy;
0

Uwaga, rocket science:

SELECT concat_ws(' ', 'student', imie, nazwisko) FROM studenci;

Plus union z drugą tabelą.

Btw, o jakim dziedziczeniu Ty tutaj mówisz? :|

0

No bo tak jakby studenci i dydaktycy dziedzicza po osobie.
Czyli jedyna opcja jest UNION?
I mam jeszcze pytanie czy jesli chce dodac do tablicy studenta kolejny wiersz to czy na poczatku musze stworzyc nowy wiersz w Osobe?
Czy nie moge tego zrobic jakos automatycznie??
Tak jak w javie wywolanie konstruktora z konstruktora??

0

Co to znaczy tak jakby dziedziczą? :|

Biedronka jest tak jakby zwierzęciem, a komputer tak jakby urządzeniem?
Piszesz tak jakby posty na tak jakby klawiaturze? :P

I mam jeszcze pytanie czy jesli chce dodac do tablicy studenta kolejny wiersz to czy na poczatku musze stworzyc nowy wiersz w Osobe?

Przecież nie mamy pojęcia jak te Twoje tabele wyglądają.

Tak jak w javie wywolanie konstruktora z konstruktora??

Co?

0

No w schemacie (zalacznik do pierwszego) jest napisane jak wygladaja tablice. Sa 3 w ktorej Studenci i Dydaktycy dziedziczą po Osobie. A pytanie moj dotyczy dokladnie czy da sie napisac jakos szybciej cos takiego:

INSERT INTO Osoby (imie, nazwisko)
VALUES ('Olek', 'Kosik'); 

DECLARE @ID int = (SELECT Osoba_id FROM Osoby WHERE nazwisko = 'Kosik');

INSERT INTO Studenci 
VALUES (@ID, '3234',CAST ( '2004-04-21' AS DATE ));

Zeby mozna bylo w jednej komendzie to zrobic.

1

Ach, faktycznie, mea culpa - nie zauważyłem załącznika.

Zeby mozna bylo w jednej komendzie to zrobic.

Siłą rzeczy musisz mieć dwa inserty, skoro musisz dodać dane do dwóch tabel, nie uważasz? ;p

1

Można połączyć tabele po osoba_id i sprawdzać obecność osoba_id dla studenta i dydaktyka
http://rextester.com/IDB23655

create table osoba(osoba_id int identity(1, 1), nazwisko varchar(50), imie varchar(50),
    CONSTRAINT PK_osoba_id PRIMARY KEY NONCLUSTERED (osoba_id)
    );
create table studenci(osoba_id int, nr_indeksu varchar(50), data_rekrutacji datetime,
    CONSTRAINT FK_studenci_osoba_id FOREIGN KEY (osoba_id)
        REFERENCES osoba(osoba_id)     
            ON DELETE CASCADE    
            ON UPDATE CASCADE
    );
create table dydaktycy(osoba_id int, data_zatrudnienia datetime,
    CONSTRAINT FK_dydaktycy_osoba_id FOREIGN KEY (osoba_id)
        REFERENCES osoba(osoba_id)     
            ON DELETE CASCADE    
            ON UPDATE CASCADE
    );
go
insert into osoba values ('Nazwisko1', 'Imie1'), ('Nazwisko2', 'Imie2'), ('Nazwisko3', 'Imie3'), ('Nazwisko4', 'Imie4'), ('Nazwisko5', 'Imie5');
go
insert into studenci values (1, '11111', '20170102 10:34:09 AM'), (3, '11112', '20170103 10:34:09 AM'), (5, '11113', '20170104 10:34:09 AM');
go
insert into dydaktycy values (2, '20160102 10:34:09 AM'), (4, '20160103 10:34:09 AM');

select 
    CASE 
        WHEN s.osoba_id IS not NULL THEN concat('Student', ' ',  imie, ' ', nazwisko)
        WHEN d.osoba_id IS not NULL THEN concat('Dydaktyk', ' ',  imie, ' ', nazwisko)
    END as osoby
    --,*
from osoba o left join studenci s on o.osoba_id = s.osoba_id left join dydaktycy d on o.osoba_id = d.osoba_id;
0
MYbase napisał(a):

No w schemacie (zalacznik do pierwszego) jest napisane jak wygladaja tablice. Sa 3 w ktorej Studenci i Dydaktycy dziedziczą po Osobie. A pytanie moj dotyczy dokladnie czy da sie napisac jakos szybciej cos takiego:

INSERT INTO Osoby (imie, nazwisko)
VALUES ('Olek', 'Kosik'); 

DECLARE @ID int = (SELECT Osoba_id FROM Osoby WHERE nazwisko = 'Kosik');

INSERT INTO Studenci 
VALUES (@ID, '3234',CAST ( '2004-04-21' AS DATE ));

Zeby mozna bylo w jednej komendzie to zrobic.

Nie w SQL.

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