az elso hozza a tabla minden sorat mindenkeppen, ha az ID nem egyedi akkor azokat amik megfelelnek a szuresnek annyiszor ahany van belole, ami nem felel meg azt csak egyszer.
a masodik mindet csak egyszer hozza es csak azokat amikre a szuro igaz. az outer join nem szamit, mert minden ID-nek van parja a selfjoin miatt. ha az id nem egyedi, akkor itt is tobbszorozodnek a sorok a selfjoin miatt.
én nem szeretem a feladvány jellegű kérdéseket. inkább egy téma, és lássuk mit tud rá azonnal összehordani. meglátszik a tájékozottsága, meg a kommunikációs képességei is.
Így hirtelen azt mondanám, hogy az első n*m és n*(m-1) közötti számú sort fog válaszul adni (n az A sorainak száma, m a C sorainak száma), a második meg A azon sorait, amihez C-ben nincs megfelelő.
Ha nem dinamikusan változó nevű (és tartalmú) mezők vannak a táblában/lekérdezésben, hanem a mezők neve és száma fix, akkor nem feltétlenül kell oszlopnevet megjeleníteni a SELECT-ben
INSERT INTO scott.teszt065 VALUES ('Lajos', 'Budapest', 41, NULL); INSERT INTO scott.teszt065 VALUES ('Géza', NULL, 29, 'fekete'); INSERT INTO scott.teszt065 VALUES ('Análka', 'Szeged', Null, 'szőke'); INSERT INTO scott.teszt065 VALUES ('Gizi', 'Pécs', 33, 'barna');
COMMIT;
SELECT nev || CASE WHEN t.cim is not null then ' Cím:' || t.cim end || CASE WHEN t.eletkor is not null then ' Életkor:' || t.eletkor end || CASE WHEN t.hajszin is not null then ' Hajszín:' || t.hajszin end sor FROM scott.teszt065 t;
Egyébként a kérdés / feladat megoldás pont azért vetődött fel, mert ez valóban egy megoldandó feladat.
És pl előfordul, hogy a legtriviálisabb megoldás sem feltétlenül ugrik be..
első körben arra gondoltam, hogy használjunk valamilyen csoportosító függvényt (pl listagg), ötvözve oszlopokra null érték vizsgálattal - és mindehhez valamilyen módon 'belekeverni' az adott oszlop nevét is.
(csak a nem null értékű oszlopok oszlopnevét és mező adatát konkatenálja)
Nem mondom hogy megvan a tiszta megoldás, nem csak üres idő elütése szempontjából kérek tanácsot..
Pont erre gondoltam. Hogy semmiképp ne jusson eszébe olyan cuccot írni, ami futásidőben az all_tab_columns-ot kérdezi. Meg bármi egyéb adatszótárt. Ugyanis azok nagyon nem erre vannak tervezve, óriási performancia szopások lesznek belőle később.
Igaz. De... ha a kérdező nem tudja, akkor rengeteg egyéb dolgot sem. -> minek tanfolyamot tartani?
Ha tisztában van vele, csak épp erre van szüksége... -> minek tanfolyamot tartani?
Ezt sohasem tudtam megérteni.
Kérdezek valamit, akkor a kérdésemre várok választ, nem arra vagyok kíváncsi, hogy mennyire nem értek hozzá.
A fene tudja, a kérdező miért hozta a példáját. Egyáltalán nem biztos, hogy pontosan azt akarja megcsinálni. Lehet, hogy van oka annak is, hogy ezt akarja és annak is, hogyha nem a valós feladatot vázolja.
Kis kezünkkel beírjuk... 60 + oszlopos rekordokat tartalmazó táblákról van szó... így ezt hagytam volna épp ki.
Ha nincs más megoldás hát nincs más megoldás, legalább bepötyögni nem kell, a táblák oszlop szerkezete, azok nevei lekérhetőek, onnantól copy & paste. Csak nagyon csúnya lesz a kód a rengeteget táblanévtől, táblanév konkatenációtól. és ha még csoportosítási függvényt is használunk hozzá akkor még egyszer az osszes 60 oszlop név felsorolva a group by résznél.... 'gyönyörű'...
"2 - hogy lehet oszlopnevet megjeleníteni rekord mezőben?"
A kérdező olyan megoldást keresett, ahol a táblastruktúra (pl oszlopnév) lekérdezhető a select részeként. És erre írtam, hogy a select írásának pillanatában az oszlopnevek ismertek, ergo úgy lehet megjeleníteni hogy a kiskezünkkel beleírjuk.
egyről beszélünk. amikor kész, használják, akkor már nem változik. ezért nincs olyan lekérdezés, amit ne lehetne előre megírni mert még nem ismert hogy a táblának hány és milyen oszlopa lesz. ha meg ismert, akkor simán megírom és kész, nincs kérdés.