SQL Anweisung Kundengruppe

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Tolle Antwort. Die Adressen der Kunden aus der tAdresse soll es in die gleiche Tabelle importieren wie die Adressen der Ansprechpartner aus tAnsprechpartner, die Ansprechpartner werden aber nicht importiert
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.690
512
Soweit ich sehe holt es aber die einzelnen Ansprechpartner nicht mit ab
Spiel das Ganze doch mal ganz klassisch mit Papier und Bleistift durch.

Was machst du denn mit deiner obigen Abfrage?
Du fragst bestimmte Zeilen aus tAdresse ab und was machst du dann mit dem JOIN?
Du kombinierst mit den gefundenen Zeilen bestimmte Spalten aus tAnsprechpartner, tKunde und tKundenGruppe. Aber was du wirklich machen willst ist doch:
zusätzlich zu den gefundenen Zeilen aus tadresse auch noch weitere Zeilen aus tansprechpartner raussuchen
Der JOIN kombiniert Spalten von zwei Tabellen und UNION kombiniert Zeilen von zwei Queries. Du musst im Endeffekt also zwei Abfragen machen und die mit Union zu einer großen Ergebnisliste verknüpfen. So in der Art SELECT *FROM tAdresse UNION SELECT * FROM tAnsprechpartner
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
verstehe ich nicht, was soll ich mit Papier und Bleistift machen?

Ich benötige die Abfrage wie oben. Das funktioniert soweit für die Kunden gut. Aber ich benötige dazu auch die Daten aus der tAnsprechpartner in die gleiche Tabelle importiert. Also Ansprechpartner.Name etc.

Ist das klar ausgedrückt oder ist es noch unverständlich? Ich bin kein Profi im SQL ... leider.
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.690
512
Du bildest oben in deiner Abfrage ein kartesisches Produkt.
Aber was du eigentlich machen willst, ist zwei Ergebnismengen verketten.
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.690
512
wie gesagt, ich bin Laie in dieser Sache. Ich benötige also den Code dafür.
Hab ich dir oben in der Antwort geschrieben. Ich dachte, dir ist viel mehr geholfen, wenn ich dir nur sage, welche Werkzeuge du benutzen musst, anstatt dir den Tisch fix und fertig zusammen zuschrauben.
Sorry -bin da von mir ausgegangen (denn ich will immer dazulernen ;))

Also: du brauchst hier zwei Abfragen. Einmal die Abfrage aus tAdresse und einmal die Abfrage aus tAnsprechpartner. Die Ergebnisse dieser zwei Abfragen verkettest du dann mit UNION und hast dann im Ergebnis eine Liste mit Datensätzen aus tAdresse und zusätzlich die Datensätze aus tAnsprechpartner.
Also im Prinzip dasselbe wie wenn du erst Liste1 in deinen Mailer importierst und dann Liste2 ;)
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.690
512
Danke für den Tipp, aber wie gesagt, ich bin Laie und suche jemand der mir den Code kurz schreibt
Ach so. Da hab ich dein Anliegen ursprünglich wohl falsch vestanden. SORRY :)

Prinzipiell sollte dir da jeder IT Dienstleister, der sich mit SQL auskennt weiterhelfen können.
Von Vorteil wäre aber jemand, der sich mit JTL auskennt und weiß wie & wo welche Daten in der Datenbank liegen, bzw. wann & warum sich was ändert. Solche JTL-Servicepartner sind auch hier im Forum unterwegs.

Ein andere Ansatz wäre evtl noch ganz vom SQL weg zu gehen und gar nicht versuchen, unmittelbar auf die Datenbank zuzugreifen. Mit der Ameise lassen sich ja auch sehr viele Daten exportiern und Bedingungen, Filter, Sortierungen u.ä. kann man dann als Exportvorlage abspeichern und immer wieder auch automatisiert ausführen.
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Danke …. Ameise wurde hier schon benannt , ich suche aber die direkte Anbindung und hatte gehofft eben hier im JTL Forum
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Ich habe jetzt mal so agiert:

SELECT distinct(tAdresse.cMail), tAdresse.cName,tAdresse.cVorname,tAdresse.cFirma, tKundenGruppe.cName
FROM tAdresse
left join tKunde on tkunde.kKunde=tAdresse.kKunde
left join tKundenGruppe on tkunde.kKundenGruppe=tKundenGruppe.kKundenGruppe where tAdresse.cMail is not null and tkundengruppe.cname <> 'Amazon' and tAdresse.cMail <> ''

union

SELECT distinct(tAnsprechpartner.cMail), tAnsprechpartner.cName,tAnsprechpartner.cVorname,tAnsprechpartner.cAnrede, tAnsprechpartner.cTel
FROM tAnsprechpartner
where tAnsprechpartner.cMail is not null and tAnsprechpartner.cMail <> ''

Ich musste hier natürlich privisorisch die tel Nr. aus den Ansprechpartnern mit übernehmen, da bei Union die Anzahl der Felder gleich sein muss. Die tel. Nr. wird jetzt natürlich in der Spalte Kundengruppe mit eingereicht., Wie kann ich das ändern so das hier auch die Kundengruppe für die Ansprechpartner mit abgerufen und in die Kundengruppe eingetragen wird?
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.690
512
Ich hab gerade keinen Zugriff auf einen SQL-Server, deshalb kann ich nichts testen. Daher hier nur Stichworte als Anmerkung:
  • In dem ersten SELECT auf tAdresse bekommst du doch die Kundengruppe nur deshalb, weil du den JOIN gemacht hast. Also müsstest du doch beim zweiten SELECT auch einen JOIN machen...
  • Mache aber nicht zwei SELECT mit jeweils demselben JOIN, um die dann mit Union zu verbinden, sondern mach besser zuerst den UNION und erst dann (und nur einmal) den JOIN. Benutze dazu eine abgeleitete Tabelle (beliebiger Name, hier z.B. "foo")
  • Ich würde UNION ALL anstatt UNION benutzen, um zu vermeiden das die Ergebnismengen sortiert werden. Allerdings weiß ich auch nicht genau wie deine Daten aussehen
  • Ich weiß auch nicht genau, warum du den DISTINCT Befehl verwendest. Distinct sollte man wenn es geht vermeiden. Prüfe, ob du dasselbe nicht durch ein GROUP BY erreichen kannst. Oft lässt sich eine Abfrage durch die Vermeidung von DISTINCT um ein vielfaches beschleunigen.
  • wie auch immer deine Abfrage nachher aussieht: schau dir auf jeden Fall den Ausführungsplan an. Vielleicht fällt dir dann was auf, wie/wo du die Abfrage noch optimieren kannst.
  • Und bevor du beginnst, alles selber zu machen, schau mal nach ob die 1.7 nicht vielleicht schon einen VIEW mitbringt, der genau das macht, was du willst.
Vom Prinzip her würde ich die Abfrage so in der Art schreiben (Ausformulieren bzw. Optimieren musst du aber selber, da ich keine 1.7 habe und nicht testen kann):

Code:
SELECT *
FROM  ( SELECT .... FROM tAdresse UNION ALL SELECT ... FROM tAnsprechpartner ) foo
JOIN tKundengruppe kg ON foo.kKunde = kg.kKunde
 
  • Gefällt mir
Reaktionen: absolutbad

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.690
512
Ich habe mir das jetzt mal spaßeshalber in meiner 1.5 angekuckt.
Vorausgesetzt die Datenstruktur ist in deiner 1.7 gleich, dann kommst du so an die Emailadressen:
SQL:
SELECT foo.kKunde, foo.cName, foo.cMail, kg.cName
FROM
 (
  SELECT kKunde, cName, cMail FROM  tAdresse WHERE NULLIF(cMail, '') IS NOT NULL
  UNION ALL
  SELECT kKunde, cName, cMail FROM tAnsprechpartner WHERE NULLIF(cMail, '') IS NOT NULL
 ) foo
LEFT JOIN tKunde k ON foo.kKunde = k.kKunde
LEFT JOIN tKundengruppe kg ON k.kKundenGruppe = kg.kKundenGruppe

Wenn ich es noch richtig in Erinnerung habe, willst du diese Daten in ein Emailprogramm einspielen bzw, das Emailprogramm dauerhaft anbinden.
Dazu solltest du aber vorher klären, wie dieses Emailprogramm mit Duplikaten umgeht.

Und was passiert, wenn sich ein Kunde vom Newsletter abmeldet? Wird dann die Emailadresse im Mailprogramm gelöscht? Wie stellst du dann sicht, dass diese Emailadresse nicht wieder über das SQL ins Emailprogramm kommt?
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Ich habe mir das jetzt mal spaßeshalber in meiner 1.5 angekuckt.
Vorausgesetzt die Datenstruktur ist in deiner 1.7 gleich, dann kommst du so an die Emailadressen:
SQL:
SELECT foo.kKunde, foo.cName, foo.cMail, kg.cName
FROM
 (
  SELECT kKunde, cName, cMail FROM  tAdresse WHERE NULLIF(cMail, '') IS NOT NULL
  UNION ALL
  SELECT kKunde, cName, cMail FROM tAnsprechpartner WHERE NULLIF(cMail, '') IS NOT NULL
 ) foo
LEFT JOIN tKunde k ON foo.kKunde = k.kKunde
LEFT JOIN tKundengruppe kg ON k.kKundenGruppe = kg.kKundenGruppe

Wenn ich es noch richtig in Erinnerung habe, willst du diese Daten in ein Emailprogramm einspielen bzw, das Emailprogramm dauerhaft anbinden.
Dazu solltest du aber vorher klären, wie dieses Emailprogramm mit Duplikaten umgeht.

Und was passiert, wenn sich ein Kunde vom Newsletter abmeldet? Wird dann die Emailadresse im Mailprogramm gelöscht? Wie stellst du dann sicht, dass diese Emailadresse nicht wieder über das SQL ins Emailprogramm kommt?
Das klingt schon mal sehr gut. Ich habe es jetzt wie folgt ergänzt:


SELECT foo.kKunde, foo.cAnrede, foo.cVorname, foo.cName, foo.cMail, kg.cName
FROM
(
SELECT kKunde, cAnrede, cVorname, cName, cMail FROM tAdresse WHERE NULLIF(cMail, '') IS NOT NULL
UNION ALL
SELECT kKunde, cAnrede, cVorname, cName, cMail FROM tAnsprechpartner WHERE NULLIF(cMail, '') IS NOT NULL
) foo
LEFT JOIN tKunde k ON foo.kKunde = k.kKunde
LEFT JOIN tKundengruppe kg ON k.kKundenGruppe = kg.kKundenGruppe

Jetzt benötige ich noch den Firmennamen aus den Adressen mit. Kann ich aber so nicht da gleich viele Argumente benötigt werden und es in tAnsprechpartner ja das Feld cFirma nicht gibt. Was kann ich tun?
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Was passiert wenn ich Amazon Aufträge, Lieferscheine und Rechnungen per SQL aus der WAWI-Datenbank lösche? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installation MS SQL 2022 Express: Fehler beim Warten auf das Wiederherstellungshandle des Datenbankmoduls Installation von JTL-Wawi 9
SQL Abfrage bei Workflow Datei Schreibn JTL-Wawi 1.9 1
Neu SQL-Abfrage von im Onlineshop aktiven Artikeln JTL Ameise - Eigene Exporte 2
Neu Biete: Windows Server optimiert für JTL und MS SQL Standard Lizenz (8 Monate alt, 42% unter Neupreis) Dienstleistung, Jobs und Ähnliches 0
Gespeicherte Filter (Lagerbewertung) nach SQL Umzug nicht mehr abrufbar JTL-Wawi 1.9 0
Neu Umzug von SQL 2016 Express auf SQL 2019 Standard mit Wawi 1.8.12.2 Installation von JTL-Wawi 10
Neu Update für Shopvote 1.1.0 führt zu SQL-Fehler Plugins für JTL-Shop 5
Neu SQL: Positionen eines Auftrags sind auf welchem Lieferschein gelandet? Eigene Übersichten in der JTL-Wawi 7
Neu Backup einrichten, habe die SQL Anmeldedaten verlegt Installation von JTL-Wawi 1
Sql Abfrage VK Preise pro Kundengruppe für Grafana JTL-Wawi 1.8 9
Neu SQL Query zum Bilder löschen Arbeitsabläufe in JTL-Wawi 3
Neu List & Label - Eigene SQL-Abfrage als Grundlage für Tabelle im Berichtscontainer? User helfen Usern - Fragen zu JTL-Wawi 10
Neu SQL Server kein Mandant auswählbar und Dienst lässt sich nicht starten Installation von JTL-Wawi 2
Neu Ameise-Vorlage per SQL abrufen und Daten als Ergebnis erhalten JTL Ameise - Eigene Exporte 1
Neu SQL DB läuft mit Fehler voll und crasht Server JTL-Shop - Fehler und Bugs 1
Neu SQL Vartable für Reservierte Artikel gesucht User helfen Usern - Fragen zu JTL-Wawi 2
Neu Innerhalb einer Variable -SQL Abfrage- das Wort "fett" schreiben Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu SQL Eigener Export - Eigene Felder im Auftrag User helfen Usern - Fragen zu JTL-Wawi 7
Neu Wie finde ich per SQL heraus welche Aufträge auf Teillieferbar stehen? JTL Ameise - Eigene Exporte 1
Neu Microsoft SQL unter MS365 Installation von JTL-Wawi 2
Neu SQL Abfrage, 3. Mahnstufe User helfen Usern - Fragen zu JTL-Wawi 1
Automatische Preiskalkulation anhand Basispreis abhängig an Kundengruppe JTL-Wawi 1.9 0
Neu Kundengruppe doppelt User helfen Usern - Fragen zu JTL-Wawi 1
Neu 📢 Plugin "Verbotene Artikel: Kauf nur für richtige Kundengruppe" by NETZdinge.de Plugins für JTL-Shop 1
Neu Gratisgeschenke nicht verfügbar für Kundengruppe X - Warenkorb-Fehler JTL-Shop - Fehler und Bugs 0
Neu Kundengruppe Alle für Zahlungsart deaktivieren geht nicht JTL-Shop - Fehler und Bugs 12
Neu Einzelne Artikel einer bestimmten Kundengruppe anzeigen lassen Allgemeine Fragen zu JTL-Shop 5
Neu durchscnittlicher VK der Kundengruppe Eigene Übersichten in der JTL-Wawi 4

Ähnliche Themen