Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jakub
Člen
Avatar
Jakub:7.7.2022 16:25

Ahoj všichni potřeboval bych pomoct s nějakou kombinací asi LEFT JOIN a SPLIT
Potřebuji propijit data z jedné tabulky do druhé, problém je, že v jednom poli mám více hodnot oddělených čárkou.

Například mám tabulku "deals"

DealID Product
1245 123,475,587
8547 587,475
9991 475

Druhou tabulku "products"

ID NAME
123 Apple
475 Cherry
587 Pineapple

Cílem je získat data takto:

DealID Product
1245 Apple,Cherry,Pi­neapple
8547 Cherry,Pineapple
9991 Cherry

Pomůže někdo?
Díky

 
Odpovědět
7.7.2022 16:25
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7.7.2022 19:36

Tezko rici, kde delas chybu, kdyz jsi zadne reseni neposkytl, sql dotaz.
Kdyz delas UNION, muze4s pridat prazdne sloupce.

SELECT a, b, c FROM x
UNION ALL
SELECT d, NULL as e, f FROM y
UNION ALL
SELECT '' as g, NULL as h, i FROM z
 
Nahoru Odpovědět
7.7.2022 19:36
Avatar
Petan
Člen
Avatar
Petan:8.7.2022 8:47

Ahoj je to spatny navrh tabulek!. mela by tam byt jeste propojovaci tabulka neco ve stylu
DealID ProductID
1245 123
1245 475
1245 587
8547 587
8547 475
9991 475

jinak by asi mohlo fungovat propojeni pres substring (findstring) co typ database to jina funkce

SELECT *
FROM deals A INNER JOIN products B ON Findstring(CAST(B.ID AS varchar(10)), A.Product) > 0

V MSSQL je to funkce charindex ,ale bude to spolehlive fungovat pouze pokud productid je tri mistny, nebo napsat vlastni vyhledavaci funkci.
Doporucuji pridat tu propojovaci tabulku !!

 
Nahoru Odpovědět
8.7.2022 8:47
Avatar
Petan
Člen
Avatar
Petan:8.7.2022 9:24

Cele by to melo byt neco ve stylu

SELECT A.DealID,group_concat(C.NAME) as name
FROM  deals A
INNER JOIN join_table B ON A.DealID = B.DealID
INNER JOIN products C ON B.ProductID = C.ID
GROUP BY A.DealID

spojovaci tabulka join_table viz vyse

 
Nahoru Odpovědět
8.7.2022 9:24
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.7.2022 9:26
Druhou tabulku "products"
ID      NAME
123     Apple
475     Cherry
587     Pineapple

Například mám tabulku "deals"
DealID  Product
1245    123,475,587
8547    587,475
9991    475

Cílem je získat data takto:
DealID  Product
1245    Apple,Cherry,Pineapple
8547    Cherry,Pineapple
9991    Cherry

Jak pise Petan, minimalne ti tam chybi propojovaci tabulka, ktera by ti spoustu zalezitosti usnadnila

"product_deal"
DealID  ProductID
1245    123
1245    475
1245    587
8547    475
8547    587
9991    475

tab data je pak
SELECT
    a.DealID
    GROUP_CONCAT(b.NAME)  AS name
FROM
    product_deal a
    LEFT JOIN products b ON b.ProductID = a.ID
GROUP BY a.DealID

tab deals je pak
SELECT
    a.DealID
    GROUP_CONCAT(a.ProductID)  AS id
FROM
    product_deal a
GROUP BY a.DealID
Editováno 9.7.2022 9:27
 
Nahoru Odpovědět
9.7.2022 9:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.