Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SQL-UNION Problem (dringend!)

Empfohlene Antworten

Veröffentlicht

Moinsen,

ich würd noch sehr viel schreiben, aber hab grad leider wenig Zeit um ne Lösung für folgendes Problem zu finden.

Wär klasse wenn ihr hier mal rüberschaut:

SELECT RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s) AS Name,

abwesenheiten.abwesendvon_d,

abwesenheiten.abwesendbis_d,

abwesenheiten.begruendung_s,

abwesenheiten.abwesenheit_id,

len(RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s)) AS Name_Laenge,

(DATEDIFF(day, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d)+1) AS 'Tage (insg.)' ,

(DATEDIFF(dd, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d) + 1)

-(DATEDIFF(wk, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d) * 2)

-(CASE WHEN DATENAME(dw, abwesenheiten.abwesendvon_d) = 'Sunday' THEN 1 ELSE 0 END)

-(CASE WHEN DATENAME(dw, abwesenheiten.abwesendbis_d) = 'Saturday' THEN 1 ELSE 0 END) AS 'Tage (ohne WE)',

'Urlaub' AS 'typ'

FROM abwesenheiten

LEFT JOIN mitarbeiter on abwesenheiten.mitarbeiter_s = (RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s))

UNION

SELECT bereitschaften.mitarbeiter_s,

bereitschaften.bereitschaftvon_dt,

bereitschaften.bereitschaftbis_dt,

bereitschaften.bemerkung_s,

bereitschaften.bereitschaft_id,

len(RTRIM(bereitschaften.mitarbeiter_s)) AS Name_Laenge,

bereitschaften.gepaufwand_n,

bereitschaften.tataufwand_n,

bereitschaften.bereitschaftstyp_s

FROM bereitschaften

WHERE 'Name' IN (SELECT tmp.string_s

FROM tmp

WHERE login_s = 'FBOETT');

Kurz gesagt:

Der erste Select holt mir alle Abwesenheiten und der zweite alle Bereitschaften.

Die WHERE-Clause ganz unten soll für das gesamte Statement gelten und mir alle Daten aus den mit UNION verbunden Tabellen geben in denen "mitarbeiter_s" gleich den Namen der in der unteren WHERE-CLAUSE selektiert wird.

Ich denke es ist nur ein Syntax-Fehler aber der Select ist für meine Verhältnisse schon ein bisschen "fetter" und bis jetzt hab ich noch keine Lösung.

Wär klasse wenn ihr helfen könntet ;-)

lg,

Flow

Versuch mal bitte:

SELECT * FROM (SELECT RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s) AS Name,

abwesenheiten.abwesendvon_d,

abwesenheiten.abwesendbis_d,

abwesenheiten.begruendung_s,

abwesenheiten.abwesenheit_id,

len(RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s)) AS Name_Laenge,

(DATEDIFF(day, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d)+1) AS 'Tage (insg.)' ,

(DATEDIFF(dd, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d) + 1)

-(DATEDIFF(wk, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d) * 2)

-(CASE WHEN DATENAME(dw, abwesenheiten.abwesendvon_d) = 'Sunday' THEN 1 ELSE 0 END)

-(CASE WHEN DATENAME(dw, abwesenheiten.abwesendbis_d) = 'Saturday' THEN 1 ELSE 0 END) AS 'Tage (ohne WE)',

'Urlaub' AS 'typ'

FROM abwesenheiten

LEFT JOIN mitarbeiter on abwesenheiten.mitarbeiter_s = (RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s))

UNION

SELECT bereitschaften.mitarbeiter_s,

bereitschaften.bereitschaftvon_dt,

bereitschaften.bereitschaftbis_dt,

bereitschaften.bemerkung_s,

bereitschaften.bereitschaft_id,

len(RTRIM(bereitschaften.mitarbeiter_s)) AS Name_Laenge,

bereitschaften.gepaufwand_n,

bereitschaften.tataufwand_n,

bereitschaften.bereitschaftstyp_s

FROM bereitschaften)

WHERE 'Name' IN (SELECT tmp.string_s

FROM tmp

WHERE login_s = 'FBOETT');

schonmal vieln dank :)

bekomme aber folgenden, mir unbekannten, fehler:

Error: java.sql.SQLException: The derived table expression is missing a correlation name. Check derived table syntax in the Reference Manual.

, SQL State: S1000, Error Code: 11753

ich probier mal weiter....wenn ihr noch ne idee habt immr raus damit ;)

Es handelt sich um eine Sybase Datenbank...also Transact-SQL....

wenn ich den befehl für MySQL oder so hätte könnt ich den aber vllt auch umbauen...

Der Fehler kommt aus SQuirelL (daher java.bla.bla ;))

Im moment steht da ja versimpelt:

SELECT * FROM

(select 'viele colums' from tabelle1 UNION select 'viele columns' from tabelle2)

WHERE 'Name' IN (SELECT tmp.string_s

FROM tmp

WHERE login_s = 'FBOETT')

dürften in der klammer nicht nur tabellen stehen?

Hi,

geb mal dem Subselect nach dem From einen "Tabellennamen"

also hier:

WHERE 'Name' IN (SELECT tmp.string_s

FROM tmp

WHERE login_s = 'FBOETT') (AS) tab;

Gruß

Vielen Dank für eure Hilfe, hab jetzt aber den Fehler gefunden:

der IN-Befehl + Subselect:


... IN (SELECT tmp.string_s

         FROM tmp

         WHERE login_s = 'FBOETT')
darf nicht "um" den gesamten großen UNION-Select, sondern muss für beide Teile des UNIONS einzeln angewendet werden. Hier nochmal der Kot:

SELECT RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s) AS 'Name',

abwesenheiten.abwesendvon_d,

abwesenheiten.abwesendbis_d,

abwesenheiten.begruendung_s,

abwesenheiten.abwesenheit_id,

len(RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s)) AS Name_Laenge,

(DATEDIFF(day, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d)+1) AS 'Tage (insg.)' ,

(DATEDIFF(dd, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d) + 1)

-(DATEDIFF(wk, abwesenheiten.abwesendvon_d, abwesenheiten.abwesendbis_d) * 2)

-(CASE WHEN DATENAME(dw, abwesenheiten.abwesendvon_d) = 'Sunday' THEN 1 ELSE 0 END)

-(CASE WHEN DATENAME(dw, abwesenheiten.abwesendbis_d) = 'Saturday' THEN 1 ELSE 0 END) AS 'Tage (ohne WE)',

'Urlaub' AS 'typ'

FROM abwesenheiten

LEFT JOIN mitarbeiter on abwesenheiten.mitarbeiter_s = (RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s))

WHERE RTRIM(mitarbeiter.nachname_s) + ', ' + RTRIM(mitarbeiter.vorname_s)

[B]IN (SELECT tmp.string_s

                    FROM tmp

                    WHERE login_s = 'FBOETT'[/B])

UNION

SELECT bereitschaften.mitarbeiter_s AS 'Name',

bereitschaften.bereitschaftvon_dt,

bereitschaften.bereitschaftbis_dt,

bereitschaften.bemerkung_s,

bereitschaften.bereitschaft_id,

len(RTRIM(bereitschaften.mitarbeiter_s)) AS Name_Laenge,

bereitschaften.gepaufwand_n,

bereitschaften.tataufwand_n,

bereitschaften.bereitschaftstyp_s

FROM bereitschaften

WHERE bereitschaften.mitarbeiter_s 

[B]IN (SELECT tmp.string_s

                    FROM tmp

                    WHERE login_s = 'FBOETT'[/B])

Danke euch, trotzdem! Hab nicht mit soviel Resonanz gerechnet :)

lg

Flow

--closeable--

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.