Složené dotazy   otázka

SQL

Dobrý den,

měl bych jeden dotaz ke složenému dotazu, kde mám pravděpodobně chybu v syntaxy a nebo "chci" něco, co prostě nelze...

To, co chci udělat bych popsal asi takto:

Najdi podle sloupce "osobaOne_id" a "osobaTwo_id" v tabulce "DVOJICE" odpovídající zkratku ve sloupci "osoba_zkratka" z tabulky "LIDE", spoj jejich textové hodnoty a doplň do tabulky "DVOJICE" do sloupce "dvojice_zkratka".

Sloupce "osobaOne_id" a "osobaTwo_id" z tabulky "DVOJICE" jsou cizí klíče ke sloupci "osoba_id" z tabulky "LIDE."

Zkouším to takto, ale příkaz nelze provést:

update DVOJICE
SET dvojice_zkratka = 
(
(SELECT LIDE.osoba_zkratka
FROM DVOJICE
JOIN LIDE ON DVOJICE.osobaOne_id = LIDE.osoba_id
)
+
(SELECT LIDE.osoba_zkratka
FROM DVOJICE
JOIN LIDE ON DVOJICE.osobaTwo_id = LIDE. osoba_id
)
)

Pokud provedu ty dva příkazy SELECT samostatně, tak fungují správně. Příkaz UPDATE syntax SET sloupec3 = (sloupecX + sloupecY)pokud vím také podporuje - už jsem ho v minulosti používal - tak problém bude asi někde jinde, žejo?

Díky za případné odpovědi

nahlásit spamnahlásit spam 0 odpovědětodpovědět

create table lide

(

osoba_id int not null IDENTITY (1, 1),

PRIJMENI varchar(50),

osoba_ZKRATKA varchar (5)

)

GO

ALTER TABLE lide ADD CONSTRAINT PK_lide PRIMARY KEY CLUSTERED (osoba_id)

GO

CREATE TABLE DVOJICE

(

id int not null IDENTITY (1, 1),

osobaOne_id int not null,

osobaTwo_id int not null,

dvojice_ZKRATKA varchar(10)

)

GO

ALTER TABLE DVOJICE ADD CONSTRAINT PK_DVOJICE PRIMARY KEY CLUSTERED (id)

GO

ALTER TABLE DVOJICE ADD CONSTRAINT FK_ONE FOREIGN KEY(osobaOne_id) REFERENCES lide (osoba_ID)

GO

ALTER TABLE DVOJICE ADD CONSTRAINT FK_TWO FOREIGN KEY(osobaTwo_id) REFERENCES lide (osoba_ID)

GO

SET IDENTITY_INSERT LIDE ON

INSERT INTO lide (osoba_id, PRIJMENI, osoba_ZKRATKA) VALUES (1, 'Novák', 'N')

INSERT INTO lide (osoba_id, PRIJMENI, osoba_ZKRATKA) VALUES (2, 'Horáková', 'H')

INSERT INTO lide (osoba_id, PRIJMENI, osoba_ZKRATKA) VALUES (3, 'Vocas', 'V')

INSERT INTO lide (osoba_id, PRIJMENI, osoba_ZKRATKA) VALUES (4, 'Ocásková', 'O')

SET IDENTITY_INSERT LIDE OFF

GO

INSERT INTO DVOJICE (osobaOne_id, osobaTwo_id) VALUES (1,2)

INSERT INTO DVOJICE (osobaOne_id, osobaTwo_id) VALUES (3,4)

GO

update DVOJICE

SET dvojice_zkratka =

(

(SELECT LIDE.osoba_zkratka

FROM DVOJICE d

JOIN LIDE ON d.osobaOne_id = LIDE.osoba_id

where d.osobaOne_id = DVOJICE .osobaOne_id

)

+

(SELECT LIDE.osoba_zkratka

FROM DVOJICE d

JOIN LIDE ON DVOJICE.osobaTwo_id = LIDE. osoba_id

where d.osobaTwo_id = DVOJICE.osobaTwo_id

)

)

select * from dvojice

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpověď! Bohužel jsem se k tomu ale dostal až teď a mezi tím to vyřešil v podstatě podobně. Tak snad to alespoň poslouží budoucím návštěvníkům fóra.

Díky Jakub

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback