MSSQL - pridani dat do sloupce na zaklade jine tabulky – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

MSSQL - pridani dat do sloupce na zaklade jine tabulky – MS SQL – Fórum – Programujte.comMSSQL - pridani dat do sloupce na zaklade jine tabulky – MS SQL – Fórum – Programujte.com

 

Michael
~ Anonymní uživatel
30 příspěvků
14. 1. 2016   #1
-
0
-

Ahoj,

potřeboval bych pomoci s problémem který momentálně řeším (googlil jsem, koukal na funke SQL ale nedohladel jsem se k čemu potřebuji).

Jde o to, že mám dvě tabulky:

TableA

id    jmeno   prijmeni    id_oddeleni    nazev_oddeleni

TableB

id   nazev

Primární klíče jsou u obou tabulek 'id'.

Potřebuji udělat cizí klíč - TableA id_oddeleni a nazev_oddeleni na TableB (id a nazev). Když propojím id a id_oddeleni, funguje v pořádku, kdežto když chci přidat nazev_oddeleni a nazev tak už to řve, že "do not match an existing primary key or UNIQUE constraint".

DB mám v MSSQL.

Děkuji

Nahlásit jako SPAM
IP: 78.157.163.–
P
~ Anonymní uživatel
212 příspěvků
14. 1. 2016   #2
-
0
-
Nahlásit jako SPAM
IP: 85.93.116.–
Kit+15
Guru
14. 1. 2016   #3
-
0
-

#1 Michael
Až přestaneš dělat obfuskaci názvů tabulek TableA, TableB, tak ti to možná samo napoví. Tabulku pojmenuj podle toho, co obsahuje jeden její řádek.

Obvykle se dělá vazba id_oddelení -> oddeleni.id. Nemá smysl do té vazby přidávat nazev_oddeleni už proto, že tam ten sloupec evidentně vůbec nemá být.

Místo názvu "id_oddeleni" raději volím "oddeleni_id", lépe se mi to čte.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Michael
~ Anonymní uživatel
30 příspěvků
14. 1. 2016   #4
-
0
-

Jde mi o to, že na základě hodnoty (ID_oddeleni) bych chtěl mít v TableA přímo název oddělení. Nejlépe, kdyby se hodnota doplnila sama. Já tam vyplním id oddělení a tím se mi doplní sám název oddělení. Zatím jsem to vyřešil přes trigger, kde mám, že při vložení nového řádku se mi hodnota do názvu oddělení vyplní, mám to tám ale natvrdo:

ALTER TRIGGER autofill ON TableA AFTER INSERT AS

UPDATE report SET nazev_oddeleni='Udrzba' WHERE id_oddeleni = '1' ..

Je možné zařídit čistějším způsobem, aby se to takto vkládalo ? Mám tedy představu, že v jedné tabulce budu mít zadefinovaná čísla oddělení a k nim přiřazený název, v druhé tabulce bych měl data viz výše, s tím, že by se při vytváření řádku (ručně) vyplnilo ID oddělení a na základě toho se sám doplnil název oddělení.

Děkuji za tipy, postřehy a rady

Nahlásit jako SPAM
IP: 78.157.163.–
Kit+15
Guru
14. 1. 2016   #5
-
0
-

#4 Michael
Nejlépe ten sloupec nazev_oddeleni zrušit.

Také bude dobré zrušit TableA i TableB. Ty názvy napovídají, že takové tabulky jsou k ničemu.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4016 příspěvků
14. 1. 2016   #6
-
+1
-
Zajímavé
Kit +

Kit chce rici, ze jak mas strukturu

TableA: id    jmeno   prijmeni    id_oddeleni    nazev_oddeleni
TableB: id   nazev

Tak mas nechat jenom 

TableA: id    jmeno   prijmeni    id_oddeleni
TableB: id   nazev

A jeste chce rici, ze tabulky a sloupce si mas pojmenovat podle toho, jake obsahuji informace. Pridal bych k tomu pojmenovat shodne sloupce stejne v ruznych tabulkach.

osoby   : id_osoby    jmeno   prijmeni    id_oddeleni
oddeleni: id_oddeleni   nazev

id_osoby = id tabulky osoby

"Potřebuji udělat cizí klíč - TableA id_oddeleni a nazev_oddeleni na TableB (id a nazev)."
Moc nechapu tu vetu. Zkus napsat duvod, proc to delat? Jakym zpusobem vyhledavas, ze potrebujes kombinovat id a text?
Preci, normalne, kdyz delas sql dotaz, tak ty tabulky propojis a vytahnes data, jaka potrebujes.

SELECT a.jmeno, a.prijmeni, b.nazev AS oddeleni
FROM osoby a
LEFT JOIN oddeleni b ON b.id_oddeleni=a.id_oddeleni -- pripojis tabulku b k a pred idecka
WHERE b.nazev LIKE 'U%' AND a.jmeno LIKE 'Pav%'

Ty aliasy a, b jsem pouzil, abych nemusel vypisovat celym textem napriklad
SELECT osoby.jmeno, osoby.prijmeni, oddeleni.nazev AS  

jmeno    prijmeni oddeleni
----------------------------
Pavel    Majzlik  Udrzba
Pavel    Stenatko Udrzba
Pavlina  Pekna    Uklizecka

Ten dotaz by mel pak vyrobit tabulku neco jako toto
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:78e3:ae...–
peter
~ Anonymní uživatel
4016 příspěvků
14. 1. 2016   #7
-
0
-

Tam na konci mi to smazalo a prehodilo nejaky text, ale ten neni dulezity. Spis jeste zminim pro porovnani

LEFT JOIN oddeleni b ON b.id_oddeleni=a.id_oddeleni -- moje
LEFT JOIN TableB ON TableB.id=TableA.id_oddeleni -- tvoje

Ty bys propojil jakesi tabulky A B podle jakychsi id v nich, kde podle dotazu si nemuzes byt jisty, ze jsou to zrovna ta spravna. Tady by to nevadilo, ale az budes delat slozitejsi dotazy s podobnymi nazvy sloupcu...

Nahlásit jako SPAM
IP: 2001:718:2601:26c:78e3:ae...–
Michael
~ Anonymní uživatel
30 příspěvků
14. 1. 2016   #8
-
0
-

Děkuji, přesně toto jsem potřeboval :)

Nahlásit jako SPAM
IP: 78.157.163.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý