Výběr hodnot ze dvou tabulek - zjednodušení dotazu – MS SQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výběr hodnot ze dvou tabulek - zjednodušení dotazu – MS SQL – Fórum – Programujte.comVýběr hodnot ze dvou tabulek - zjednodušení dotazu – MS SQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
22. 1. 2020   #1
-
0
-

Ahoj,

DROP TABLE IF EXISTS #Columns;
SELECT  Column_name, '#808000' as color INTO #Columns FROM Information_schema.columns
WHERE Table_name LIKE 'Hodnoty' AND Column_name NOT IN ('Id');

UPDATE #Columns SET #Columns.color = Barvy.color FROM #Columns INNER JOIN
(SELECT color, columnName FROM ChartColorSchema WHERE userName = 'jmeno') as Barvy
ON #Columns.Column_name = Barvy.columnName;


SELECT * FROM #Columns;

Výše uvedený kód mi získá názvy sloupců z tabulky Hodnoty a z tabulky ChartColorSchema k nim doplní hodnoty color pokud existují, jinak defaultní hodnota. Pořád se mi nedaří přijít na to, jak to udělat bez dočasný tabulky jedním dotazem. 

Ještě definice ChartColorSchema jak ji vytvořilo MS VS: 

CREATE TABLE [dbo].[ChartColorSchema] (
    [id]         INT            IDENTITY (1, 1) NOT NULL,
    [userName]   NVARCHAR (256) NOT NULL,
    [color]      NCHAR (8)      NOT NULL,
    [columnName] NVARCHAR (25)  NOT NULL,
    CONSTRAINT [PK_ChartColorSchema] PRIMARY KEY CLUSTERED ([id] ASC),
    CONSTRAINT [FK_ChartColorSchema_ChartColorSchema] FOREIGN KEY ([id]) REFERENCES [dbo].[ChartColorSchema] ([id])
);

Jak dosáhnout stejného výsledku jedním dotazem bez dočasné tabulky?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
gna
~ Anonymní uživatel
1209 příspěvků
22. 1. 2020   #2
-
0
-

Takže jde o ten default? IIF/CASE.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Expert
22. 1. 2020   #3
-
0
-

#1 hlucheucho
použil bych left join na color scheme a do selectu coalesce(colorscheme.color, '#808000') as color
 

Nahlásit jako SPAM
IP: 185.112.167.–
22. 1. 2020   #4
-
0
-

Tabulka ChartColorSchema nemusí mít k některým Column_name žádný záznam. Ještě mne napadlo UNION a poddotaz:


SELECT columnName as colName, color FROM ChartColorSchema WHERE userName = 'dania@ipm.cz'
AND columnName IN (SELECT Column_name FROM Information_schema.columns
WHERE Table_name LIKE 'Hodnoty' AND Column_name NOT IN ('Id'))
UNION
SELECT Column_name AS colName, '#808000' as color FROM Information_schema.columns WHERE
(Table_name LIKE 'Hodnoty') AND (Column_name NOT IN ('Id')) AND
Column_name NOT IN (SELECT columnName FROM ChartColorSchema WHERE userName = 'dania@ipm.cz')

Bez dočasné tabulky, ale pořád mám pocit, že složitý jak mlátička

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Řešení
MilanL+1
Expert
22. 1. 2020   #5
-
0
-
Vyřešeno Nejlepší odpověď

#4 hlucheucho
1 dotaz,jen nemám možnost vyzkoušet, COALESCE by mělo doplnit defaultní hodnotu pokud by mělo být color null, tzn i v případě, že není v tabulce color schema

SELECT columns.Column_name, COALESCE(barvy.color, '#808000') as color
FROM Information_schema.columns columns

LEFT JOIN (SELECT ColumnName, color from ChartColorSchema 
HERE userName = 'dania@ipm.cz') barvy 
ON columns.Column_name=barvy.columnName

WHERE columns.Table_name LIKE 'Hodnoty' AND columns.Column_name NOT IN ('Id')
Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Expert
22. 1. 2020   #6
-
0
-

ten 1 dotaz myšleno jako 1 SQL QUERY, asi si to vytvořím a vyzkouším v mý zkušební db

Nahlásit jako SPAM
IP: 185.112.167.–
22. 1. 2020   #7
-
0
-

#6 MilanL
u mne na zkoušení dojde až zítra

hu

Nahlásit jako SPAM
IP: 2001:af0:ffe4:85f4:dc:2830:e637:1e57...–
MilanL+1
Expert
22. 1. 2020   #8
-
0
-

#7 hlucheucho
chybí tam W u WHERE té vnořené, právě jsem to odzkoušel a funguje mi to v mysql

Nahlásit jako SPAM
IP: 185.112.167.–
23. 1. 2020   #9
-
0
-

#8 MilanL
jsem nevěděl, že za ON může být ještě WHERE.  Si budu muset doplnit vzdělání.

Vyzkoušeno, funguje.

hu

Pozn. a je rychlejší

Nahlásit jako SPAM
IP: 195.178.67.–
MilanL+1
Expert
23. 1. 2020   #10
-
0
-

#9 hlucheucho

btw do coalesce můžeš dát celou řadu

když si v tabulce colorscheme uděláš barevnou šablonu default, můžeš pak udělat druhou subquery např s aliasem def a s userName="default" a pak rozšířit COALESCE(barvy.color. def.color, "#808000") coalesce bude ten obsah závorky procházet dokud nenarazí na hodnotu.

Nahlásit jako SPAM
IP: 185.112.167.–
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

Podobná vlákna

Porovnání dvou tabulek — založil WeeHool

Propojení dvou tabulek — založil Pavelv

Spojení dvou tabulek — založil Forest

Propojení dvou tabulek MySQL. — založil hustoles

 

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