Spojenie dvoch tabuliek s podmienkou – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spojenie dvoch tabuliek s podmienkou – MySQL – Fórum – Programujte.comSpojenie dvoch tabuliek s podmienkou – MySQL – Fórum – Programujte.com

 

AAAA
~ Anonymní uživatel
9 příspěvků
1. 11. 2018   #1
-
0
-

Ahojte,

ako by som vedel vybrať s dvoch tabuliek údaje?

V jednej tabulke mám defualtné hodnoty, a v druhej hodnoty ktoré nahradzujú tie defaultné.

------------------------------------------------------

prva tabulka: hodnoty_defaultne:

id     name                      default_hodnota

1     only_in_stock          1

2    ina_hodnota            5

druha tabulka: hodnoty

id       id_stranky       id_hodnoty      hodnota

1       52                    1                     2

-------------------------------------------------------------

Chcem vytiahnuť všetky defaultné hodnoty s tým, že tie ktoré budú existovať v druhej tabulke na základe spojenia hodnoty.id_hodnoty = hodnoty_defaultne.id, ale tiez na základe nejakého kľúča napr. hodnoty.id_stranky = 52.

Skusal som napr.

SELECT *

        FROM hodnoty AS h
        
        LEFT JOIN hodnoty_defaultne AS hd ON hd.id = h.id_hodnoty 

WHERE h.id_stranky = 52

ale mi to nejde. Resp. nie som zdatný v spájaní tabuliek. Nie je problém to vytiahnuť dvoma dotazmi, a potom v cykle vymeniť hodnoty, ale mám slabú chvíľku, keď ma nevie napadnúť, ako to urobiť jedným dotazom :(

Ďakujem

Nahlásit jako SPAM
IP: 188.123.100.–
AAAA
~ Anonymní uživatel
9 příspěvků
1. 11. 2018   #2
-
0
-

 nakoniec som prišiel nato, že to nemôžem triediť cez WHERE, ale priamo cez to spojenie ON...

hádam to mam dobre, kedže to ide :)

SELECT *

FROM hodnoty_defaultne AS hd
        
LEFT JOIN hodnoty AS h ON hd.id = h.id_hodnoty AND h.id_stranky = 52
Nahlásit jako SPAM
IP: 188.123.100.–
MilanL+1
Grafoman
6. 11. 2018   #3
-
0
-

#2 AAAA
neřeší hodnotu, budeš to muset řešit spíš pomocí podmínky a subSelectu

online sql  https://www.jdoodle.com/execute-sql-online

create table stock(id int, name nchar, def int);

insert into stock values(1, "One", 1);
insert into stock values(2, "Two", 2);
insert into stock values(3, "Tre", 3);

create table hodnoty(id int, page int, idst int, hodnota int);

insert into hodnoty values(1, 52, 1, 5);
insert into hodnoty values(2, 4, 2, 4);

select st.id, st.name, st.def, sub.cnt, sub.hodnota, 
case sub.cnt when 1 then sub.hodnota else st.def end as HODN
from stock as st
left join (select id, coalesce(max(hodnota),0) as hodnota, count(id) as cnt 
from hodnoty where page=52 group by id)sub on sub.id=st.id;

výsledek
ID/name/default/count a hodnota z 2.tab na základě podmínky page 52/výsledná hodnota default nebo z 2.tab
1|One|1|1|5|5
2|Two|2| | |2
3|Tre|3| | |3

možná by to šlo efektivněji, ale na to teď nemám čas hledat na netu nebo ve svých projektech.

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
6. 11. 2018   #4
-
0
-

šlo by to bez toho counteru dát podmínku rovnou na tu hodnotu ze subSelectu

case when sub.hodnota>0 then sub.hodnota else st.def end as HODN

Nahlásit jako SPAM
IP: 91.139.9.–
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, 13 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ý