Datenabgleich mit Bedingung
dobra
- datenbank
Hallo,
ich möchte in einer Abfrage 2 Tabellen vergleichen und die Artikel auslesen, die NICHT in beiden Tabellen vorkommen.
so weit bin ich gekommen:
SELECT t1.itemid, t2.itemid
FROM Tabelle1 AS t1 RIGHT JOIN Tabelle2 AS t2 ON t1.itemid=t2.itemid
WHERE IsNull(t1.itemid);
-> gibt mir alle Artikel aus, die in Tabelle 2 stehen aber nicht in Tabelle 1
mein Problem ist, daß ich in Tabelle 2 Artikelnummern habe, die ein Teilstring von den Artikelnummern in Tabelle 1 sind und auch NICHT ausgegeben werden sollen.
also z.B. Artnr in Tabelle 1 xyz-10, xyz-20
und in Tabelle 2 xyz
in der Access Abfrage habe ich das so gemacht:
IIf(InStr(Tabelle1.ArtNr,"-") <>0, Left(Tabelle1.ArtNr,InStr(Tabelle1.ArtNr,"-")-1) AS dummyspalte
aber ich bringe diese Unterabfrage nicht in die SQL Abfrage :'(
Kann mir bitte jemand helfen?
(ich hoffe, daß ich halbwegs verständlich beschreiben konnte, was ich machen möchte?)
Vielen dank im Voraus
dobra
Hallo,
um die Artikel aus der zweiten Tabelle zu bekommen, die es in der ersten nicht gibt, kannst du noch einen LEFT JOIN machen und die beiden Ergebnisse via UNION verknüpfen.
Bei den Teilstrings kann ich nur raten: Probier mal, die Verknüpfungs-Bedingung hinter dem ON entsprechend anzupassen.
Viele Grüße
BurninLeo
Hallo,
die Code-Beispiele im angehängten Link nutzen NOT EXISTS - das könnte dir auch weiterhelfen:
http://www.die-informatiker.net/post/Fachsimpelei/MINUS_oder_INTERSECT_in_MySQL/69692#69692
Viele Grüße
BurninLeo
Hallo an alle,
ich hab's mit den Bedingung nicht hingekriegt :(
aber ich habe ein Möglichkeit gefunden, *ohne* diese Bedingung das Ergebnis zu bekommen das ich brauch
allerdings mit *DREI* Abfragen...
Damit ich ganze Ablauf problemlos automatisieren kann, wäre es schön, wenn ich das in EINER Abfrage erledigen könnte....
dazu reichen aber meine seeeehr rudimentären Kenntnisse aber nicht :(
Ich weiß, diese Bitte ist unverschämt, aber vielleicht hat jemand Zeit mir aus meinem "Flickwerk" eine komplette Abfrage zusammen zu bauen?
SELECT schmuck_csv.ArtNr, ...., schmuck_csv.NeuZugang,
Round(IIf(schmuck_csv.Listenpreis<5,schmuck_csv.Listenpreis*1.8,IIf(schmuck_csv.Listenpreis<10,.....schmuck_csv.Listenpreis*1.4)))))),1) AS myPreis,
IIf(InStr(schmuck_csv.ArtNr,"-") <>0, Left(schmuck_csv.ArtNr,InStr(schmuck_csv.ArtNr,"-")-1)) AS vari
FROM schmuck_csv;
SELECT schmuck_csv.BildGross, SCH_ITEM.MYIMAGE, SCH_ITEM.ITEMID, '1' AS loeschen
FROM schmuck_csv AS schmuck_csv RIGHT JOIN SCH_ITEM AS SCH_ITEM ON schmuck_csv.BildGross=SCH_ITEM.MYIMAGE
WHERE IsNull(schmuck_csv.BildGross);
SELECT schmuck_csv.ArtNr, SCH_SITM.ITEMID, '1' AS loeschen
FROM schmuck_csv RIGHT JOIN SCH_SITM AS SCH_SITM ON schmuck_csv.ArtNr=SCH_SITM.ITEMID
WHERE IsNull(schmuck_csv.ArtNr);
lg aus Wien
dobra
Hello,
IIf(InStr(Tabelle1.ArtNr,"-") <>0, Left(Tabelle1.ArtNr,InStr(Tabelle1.ArtNr,"-")-1) AS dummyspalte
für jeden dieser Operatoren gibt es eine Entsprechung in deinem jeweiligen SQL-Dialekt.
Welches SQL suchst du? MySQL, MS-SQL, ...?
Das Handbuch sollte dir unter Control Flow und String-Functions weiterhelfen.
MfG
Rouven
zuerst mal Danke für die Tipps - kann's leider erst Abend probieren.
Meine DB ist eine mySQL Datenbank
... und ich muß gestehen, daß ich seeeehr wenig Ahnung vom SQL Syntax habe
die Teillösungen habe ich mir im web zusammengesucht und nur für meine Probleme angepasst.
Die korrekte Verwendung von JOIN, UNION usw. sind leider (noch) "Zufallstreffer" für mich ;)
Hello,
IIf(InStr(Tabelle1.ArtNr,"-") <>0, Left(Tabelle1.ArtNr,InStr(Tabelle1.ArtNr,"-")-1) AS dummyspalte
also, dein
IIf = CASE WHEN
InStr = INSTR
Left = LEFT
damit solltest du alles haben.
MfG
Rouven
Danke!
mfG
dobra
echo $begrüßung;
IIf(InStr(Tabelle1.ArtNr,"-") <>0, Left(Tabelle1.ArtNr,InStr(Tabelle1.ArtNr,"-")-1) AS dummyspalte
Da fehlt übrigens noch was, die Klammer von IIf ist nicht geschlossen.
IIf = CASE WHEN
Es gibt auch IF(), und das lässt sich bei einfacher if-else-Entscheidung angenehmer notieren als das CASE-Konstrukt.
Außerdem verlinktest du auf das CASE-Statement für Stored Procedures, das eine klein wenig andere Syntax (END vs. END CASE) hat als der CASE-Operator, den man in einer Query einbauen kann.
echo "$verabschiedung $name";