SQL lekérdezás több sorána felsorolása egyetlen sorban

 ( morfyum | 2019. április 15., hétfő - 19:36 )

Üdv! Sajnos hiába googlézek magyarul/Angolul nem találtam működő megoldást a kérdésemre.
Egy összetettebb több táblás lekérdezést építgetek, de sajnos az utolsó komponensnél(táblánál) rájöttem, hogy nem tudom hogyan kell megfogalmazni SQL-ben, amit szeretnék tőle.
A kérdésemet egy egyszerű egy-táblás lekérdezés formájában teszem fel, a konkrét problémát mutatva, a több táblás változatát én akarom befejezni. :p

Mivel hajlamos vagyok hosszan részletezni a dolgokat ( elkerülve a félreértéseket) jól látható pontokba soroltam a kérdéseimet, így nem veszik el senki a rossz fogalom-használatom miatt felmerülő egyéb "talán" kérdésnek tűnő dolgokban.

=======================
# KÉRDÉS 1: HOGYAN RENDEZHETEM A LEKÉRDEZÉS TÖBB SOROS EREDMÉNYÉT EGYETLEN SORBA? (ezzel elkerülve a redundáns megjelenést)
=======================
BŐVEBBEN:
A "LISTA" táblában az "XtablaID" többször szerepel és minden sorban van egy-egy új adat, pl:
listaID XtablaID ADAT
===== ===== =====
0 | 0 | valami1
1 | 0 | ...valami2
2 | 1 | ezMásikKomponeshezTartozóAdat...

A lekérdezés SELECT * FROM lista WHERE XtablaID=0

Egymás alá kiadja a "valami1", és "...valami2" adatot, viszont az én fő lekérdezésemben egyetlen sorban kellene megjelenítenem ennek a mellék-táblának az X mennyiségű sorában található adatokat ( amennyi épp az xtablaID-hoz hozzá van rendelve.) akár vesszőkkel elválasztva.
(a redundancia elkerülése végett van erre szükségem )

!!! HA
SELECT * FROM lista WHERE XtablaID=0 GROUP BY XtablaID
Tehát Group By-al összevonom a a sorokat, akkor csak az első vagy X. elemet jeleníti meg, nekem viszont minden sor elemére szükségem lenne.

Természetesen a fő és egyéb mellék táblák adataival együtt akarom majd megjelentetni, de azt már én szeretném megcsinálni. E-nélkül viszont azt sem tudom befejezni.

=======================
# KÉRDÉS 2: SZERINTEM A TÖBB LEKÉRDEZÉS TÖBB ERŐFORRÁS IS, MINT EGY NAGY LEKÉRÉS A SZERVERTŐL, JÓL GONDOLOM? VAGY JOBB, HA KOMPLEXEBB LEKÉRDEZÉSEKET INKÁBB KÜLÖN VÉGEZTETEM EL?
=======================
BŐVEBBEN:
Van értelme szórakozni a lista tábla elemeinek egy sorba válogatásával, vagy egyszerűbb, ha kettő lekérdezést indítok?
Én úgy gondolnám, hogy erőforrás hatékonyabb lennék egy lekérdezés küldésével a szerver felé.

=======================
# EXTRA KÉRDÉS 3: A LEKÉRDEZÉSEM MEGFELEL A "FROM TABLA1, TABLA2, TABLA3" FORMÁTUMBAN?
=======================
BŐVEBBEN:
Mivel a több táblámnak (az egyes táblák elsődleges kulcsait leszámítva) minden mezőre szükségem van, így a fő lekérdezésem, valahogy így néz ki:

SELECT * FROM tabla1 tabla2 tabla3 WHERE xtablaID=0 AND (... egyéb tábla relációk ...stb)

Ha jól értelmeztem, a (Inner/Left/Right)JOIN-ok nem erre a feladatra vannak kitalálva, nem azokat kell használnom.
FORRÁS: http://www.sze.hu/~szorenyi/sz03/htm/doc/OUTJOIN.htm

=======================
# EXTRA EXTRA KÉRDÉS: DESKTOP ALKALMAZÁS ESETÉN VAN SPECIÁLIS ADATBÁZI ESZKÖZ?
=======================
BŐVEBBEN:
Jelenleg Webezek, de a későbbiekben programozni is szeretnék. A példa kedvéért, egy offline játék esetén (ami mondjuk C++ ) egyszerűen egy Array-ben fogom letárolni a játékos életét, sebzését, védelmi pontjait, és a táskájában szereplő tárgyainak neveit/db számát?
Vagy létezik kliens használatra valamilyen framework segítségével összedrótozható lokális adatbázis?
Ugyan ez, online játék esetén, hasonlóan a böngésző alapú játékokhoz, szimplán egy valamilyen sql adatbázisra épül?

A segítséget előre is nagyon szépen köszönöm! :)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Csak az extra extra extrára tudom a választ. Pl. az SQLite3 pont tud ilyet. Kapsz egy libet, amivel egy fájlban tárolható, SQL-lel kérdezgethető adatbázist tudsz piszkálni. Használja is ilyesmire Firefoxtól kezdve kismillió alkalmazás.

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Első kérdés milyen db? Esetleg verzió?

V1.
-Pivot function/operator
-Ha van akkor esetleg recursive query és concatenation
- Ha viszonylag statikus az egybe tartozó sorokszáma akkor egy csodálatos case when hogy összerakd egy mezőbe
V2, ez nagyban függ az optimizer/parsertől statisztikáktól sorok számától stb. Lehet hogy 10 tábláig jó vagy, aztán a 11. felborítja az egész plant.

V3, sokkal jobban szeretem inner/left/right joint kiírva. Sokkal olvashatóbb, érthetőbb mit akarhatott a szerző.

Bónusz: SQLite? Lokálban. Civilization V alatt is ez van pl. Ha jól emlékszem.

Milyen SQL szerver? A nyelvi elemek és a szintaxis nagyon eltérnek.

Az 1.) kérdésre, ha jól értem, MySQL és SQLite esetében például jó lehet a GROUP_CONCAT() funkció:

SELECT GROUP_CONCAT(ADAT SEPARATOR ',') FROM lista WHERE XtablaID = 0

A 2.) kérdésre: az adatbázisszerver általában képes a komplex lekérdezés optimalizációjára, tehát igen, általában megéri szerveren belül megoldani a lekérdezések halmazát.

A 3.) kérdésre: én valószínűleg LEFT JOIN-t használnék.

Az extra kérdésre: pl. SQLite.

Működik!
Köszönöm, meg is van!

SELECT GROUP_CONCAT(ADAT SEPARATOR ', ') FROM lista WHERE XtablaID = 0

Nálam azért nem működött a GROUP_CONCAT, mert lemaradt a "SEPARATOR" kapcsoló, ezért adott vissza syntax errort.
Szépen, vessző, szóközzel el is választja az eredményeket

Köszönöm szépen! :))

Köszönöm az eddigi válaszokat!
A GROUP_CONCAT paramétert megtaláltam, de még nem sikerült használnom, mindig valamilyen hibával tért vissza a lekérdezés.

Valóban elfelejtettem megjelölni, hogy MariaDB-t használok:
mysql Ver 15.1 Distrib 10.3.12-MariaDB, for Linux (x86_64) using readline 5.1