MySQL zwei Tabellen zusammenführen
Hallo,
ich habe in MySQL eine Artikel-Tabelle in welcher alle Artikel gespeichert sind sowie eine art_preise-Tabelle, in welcher nur die Artikel aufgeführt sind, deren Preise geändert werden sollen. Teils sind die Artikel also in beiden Tabellen enthalten.
Ich benötige nun eine Ausgabe, in welcher mir ALLE Artikel erscheinen. Jeweils mit den Preisen aus der "normalen" Artikel-Tabelle ODER wenn der Artikel auch in art_preise vorhanden, NUR den Preisen aus art_preise.
Ich komme auf keinen grünen Zweig. Wie kann ich das am Besten lösen?
Danke euch!
ich habe in MySQL eine Artikel-Tabelle in welcher alle Artikel gespeichert sind sowie eine art_preise-Tabelle, in welcher nur die Artikel aufgeführt sind, deren Preise geändert werden sollen. Teils sind die Artikel also in beiden Tabellen enthalten.
Ich benötige nun eine Ausgabe, in welcher mir ALLE Artikel erscheinen. Jeweils mit den Preisen aus der "normalen" Artikel-Tabelle ODER wenn der Artikel auch in art_preise vorhanden, NUR den Preisen aus art_preise.
Ich komme auf keinen grünen Zweig. Wie kann ich das am Besten lösen?
SELECT * FROM
(SELECT 'art_preise' AS quelle, ap.apr_artlfdnr, ap.apr_vkpreis_001, ap.apr_vkpreis_002, ap.apr_vkpreis_003, ap.apr_vkpreis_004,
ap.apr_vkpreis_005, ap.apr_vkpreis_006, ap.apr_vkpreis_007, ap.apr_vkpreis_008, ap.apr_vkpreis_009
FROM art_preise ap
UNION DISTINCT
SELECT 'artikel' AS quelle, a.art_lfdnr, a.art_vkpreis_001, a.art_vkpreis_002, a.art_vkpreis_003, a.art_vkpreis_004,
a.art_vkpreis_005, a.art_vkpreis_006, a.art_vkpreis_007, a.art_vkpreis_008, a.art_vkpreis_009
FROM artikel a) AS preise
Danke euch!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 275929
Url: https://administrator.de/contentid/275929
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo RedBullMachtFit,
hier noch ein Vorschlag.
Gruß Jörg
hier noch ein Vorschlag.
SELECT a.art_lfdnr,
NVL(ap.apr_vkpreis_001, a.art_vkpreis_001) AS art_preis_001,
NVL(ap.apr_vkpreis_002, a.art_vkpreis_002) AS art_preis_002,
NVL(ap.apr_vkpreis_003, a.art_vkpreis_003) AS art_preis_003,
NVL(ap.apr_vkpreis_004, a.art_vkpreis_004) AS art_preis_004,
NVL(ap.apr_vkpreis_005, a.art_vkpreis_005) AS art_preis_005,
NVL(ap.apr_vkpreis_006, a.art_vkpreis_006) AS art_preis_006,
NVL(ap.apr_vkpreis_007, a.art_vkpreis_007) AS art_preis_007,
NVL(ap.apr_vkpreis_008, a.art_vkpreis_008) AS art_preis_008,
NVL(ap.apr_vkpreis_009, a.art_vkpreis_009) AS art_preis_009
FROM artikel a
LEFT JOIN art_preise ap ON a.art_lfdnr = ap.apr_artlfdnr
ORDER BY a.art_lfdnr
Gruß Jörg
einfacher und kürzer, dann versuch das.
G Jörg
SELECT a.art_nr,
ROUND(NVL(ap.apr_vkpreis_001, a.art_vkpreis_001),2) AS art_preis_001,
ROUND(NVL(ap.apr_vkpreis_002, a.art_vkpreis_002),2) AS art_preis_002,
ROUND(NVL(ap.apr_vkpreis_003, a.art_vkpreis_003),2) AS art_preis_003,
ROUND(NVL(ap.apr_vkpreis_004, a.art_vkpreis_004),2) AS art_preis_004,
ROUND(NVL(ap.apr_vkpreis_005, a.art_vkpreis_005),2) AS art_preis_005,
ROUND(NVL(ap.apr_vkpreis_006, a.art_vkpreis_006),2) AS art_preis_006,
ROUND(NVL(ap.apr_vkpreis_007, a.art_vkpreis_007),2) AS art_preis_007,
ROUND(NVL(ap.apr_vkpreis_008, a.art_vkpreis_008),2) AS art_preis_008,
ROUND(NVL(ap.apr_vkpreis_009, a.art_vkpreis_009),2) AS art_preis_009
FROM artikel a
LEFT JOIN art_preise ap ON a.art_lfdnr = ap.apr_artlfdnr
ORDER BY a.art_nr
G Jörg
Oracle nvl() ist in MySQL IfNULL(), ich weiß aber nicht ob es nicht theoretisch auch 0 als Preis geben kann. Wenn dem so wäre ließe sich das mit CASE auch noch abfangen, musst du mal gucken.
Du kannst auch machen.
Du kannst auch
ROUND((CASE WHEN ap.apr_vkpreis_001 IS NOT NULL THEN ap.apr_vkpreis_001 ELSE a.art_vkpreis_001 END),2) AS preis1
Darum ja, CASE kann mehr als nur auf NOT NULL prüfen, falls erforderlich.