PDA

View Full Version : SQL Problem



Seiten : 1 [2] 3 4 5

andreaspr@aon.at
15-06-10, 10:04
Du brauchst "NUR" die SQL-Referenz durchzulesen, dann findest du einige nützliche feinheiten :D

PDF files for Database (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzatd/rzatdprintable.htm)

cbe
15-06-10, 10:11
fetch first row only

geht ja auch interaktiv - nett, wieder was gelernt.

Ich frage mich nur, ob man sich darauf verlassen kann, dass die Sortierung immer dieselbe ist, denn sonst würde im 2. Unter-Select ein anderer Satz verwendet.

Gruß, Christian

andreaspr@aon.at
15-06-10, 10:25
Ich frage mich nur, ob man sich darauf verlassen kann, dass die Sortierung immer dieselbe ist, denn sonst würde im 2. Unter-Select ein anderer Satz verwendet.

Im Visual Explain kann man sich den Prozessablauf anzeigen lassen. Dort sieht man, dass das "Fetch First N Rows" als letztes statement ausgeführt wird. Also nach dem Order By.

Fuerchau
15-06-10, 10:46
Bei obiger Aufgabenstellung sieht man ja eigentlich, dass dies alles nichts bringt da die TelNr ja immer aus der gleichen Datei stammt.
Hier möchte man aber alle TelNr'n gleichzeitig haben.

Dies kann man ggf. noch als ein Feld per Concat ja selektieren:

select ...,
b.telnr1 concat b.telnr2 as telnr,
b.mobil1 concat b.mobil2 ... as mobil,
... from myfile
left join adr b
where ...

bettina_martin
15-06-10, 13:22
Hi,

probiers mal mit "fetch first row only" wenn es wirklich egal ist ob du den ersten oder letzten DS bekommst!



CREATE VIEW cmsms1/zkna2_view AS (
select MANDT, KUNNR, NAME1, NAME2, STRAS, ORT01, PSTLZ, LAND1,
SORTL, VALUE(TEL1, '') AS TEL1,
VALUE(TEL2, '') AS TEL2,
VALUE(MOBIL1, '') AS MOBIL1,
VALUE(MOBIL2, '') AS MOBIL2,
VALUE(EMAIL1,'') AS EMAIL1,
VALUE(EMAIL2,'') AS EMAIL2, STCEG FROM (
SELECT A.kunnr, A.NAME1,
(SELECT tel_number FROM r3p02data/adr2
WHERE addrnumber=A.adrnr and consnumber='001' fetch first row only) AS TEL1,
(SELECT tel_number FROM r3p02data/adr2
WHERE addrnumber=A.adrnr and consnumber='002' fetch first row only) AS TEL2,
(SELECT tel_number FROM r3p02data/adr2
WHERE addrnumber=A.adrnr and consnumber='003' fetch first row only) AS MOBIL1,
(SELECT tel_number FROM r3p02data/adr2
WHERE addrnumber=A.adrnr and consnumber='004' fetch first row only) AS MOBIL2,
(SELECT smtp_addr FROM r3p02data/adr6
WHERE addrnumber=A.adrnr and consnumber='001' fetch first row only) AS EMAIL1,
(SELECT smtp_addr FROM r3p02data/adr6
WHERE addrnumber=A.adrnr and consnumber='002' fetch first row only) AS EMAIL2
FROM r3p02data/kna1 a ) as A where kunnr<>'0000062871' )


habe das jetzt genau SO übernommen, jedoch bekomme ich folgenden Fehler:

Schlüsselwort FETCH nicht erwartet. Gültige Token: ) UNION EXCEPT

:confused:

B.Hauser
15-06-10, 13:24
... das liegt daran, dass Du wahrscheinlich noch nicht auf Release 6.1 bist. FETCH FIRST ROW ONLY in einem Sub-Select ist erst ab Release 6.1 möglich.

Birgitta

Pikachu
15-06-10, 13:29
Also dann mal hopp, hopp: Releasewechsel ;)

bettina_martin
15-06-10, 13:29
... das liegt daran, dass Du wahrscheinlich noch nicht auf Release 6.1 bist. FETCH FIRST ROW ONLY in einem Sub-Select ist erst ab Release 6.1 möglich.

Birgitta

oh sch....... wie schau ich schnell nach welches release man hat auf der as/400 ? :)

Pikachu
15-06-10, 13:38
GO PTF, Auswahl 5, Eingabetaste. Und dann die Angaben zum "Release der Basisoption" bei den Produkt-IDs "xxxx999" und "xxxxSS1".

Oder mit nem CL-Programm: *KLICK (http://www.projex.com/forum/how-retrieve-ibmi-iseries-as400-operating-system-version-clp-program)*

Oder so: DSPDTAARA QGPL/QSS1MRI

bettina_martin
15-06-10, 13:41
okay, wir fahren auf V5R4.

Releasewechsel ? Naja, das ist bei einem outgesourcten Rechner (eigentlich sinds 3) nicht ganz so einfach ;-)

shit, jetzt kann ich das nicht benutzen, das "fetch first row only" wär genau DAS was ich gebraucht hätte :(