AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Tabelle vergleichen / Left Join bringt zu viele Spalten

Tabelle vergleichen / Left Join bringt zu viele Spalten

Ein Thema von Ykcim · begonnen am 11. Jul 2019 · letzter Beitrag vom 11. Jul 2019
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
646 Beiträge
 
Delphi XE5 Professional
 
#1

Tabelle vergleichen / Left Join bringt zu viele Spalten

  Alt 11. Jul 2019, 12:04
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Hallo Zusammen,

ich prüfe zwei Tabellen gegeneinander und schreibe die Unterschiede in eine dritte Tabelle.
Das Prüfen klappte eigentlich ganz gut, ich bekomme die richtigen Datensätze angezeigt.

Ich nutze diese Vorgehensweise auch, um unterschiedlich aufgebaute Tabellen anhand von zwei Feldern zu vergleichen. Auch das klappt eigentlich...

Mein Problem ist nur, dass mir dann die Spalten beider Tabellen ausgegeben werden und nicht nur die der Tabelle, die im select-statement steht.

Delphi-Quellcode:
select * from kommentfa a
  left join as400temp t on a.waaunr=t.waaunr and a.waaupo=t.waaupo
where t.waaunr is null
Ich bekomme die Spalten von der Tabelle kommentfa (hier stehen auch Werte in den Feldern) und die Spalten von Tabelle as400temp (hier sind logischer Werte alle NULL).

Kann mir jemand einen Tip geben, wie ich nur die Spalten von kommentfa bekomme? Ich möchte das Ganze nämlich mit einem INSERT verknüpfen.
Delphi-Quellcode:
insert into kommentfaarchiev
  select * from kommentfa a
    left join as400temp t on a.waaunr=t.waaunr and a.waaupo=t.waaupo
  where t.waaunr is null
Aktuell bekomme ich logischer Weise die Fehlermeldung: Column count doesn't match value count at row 1

Ich könnte natürlich statt select * from die einzelnen Felder auflisten. Aber ich muss das mit einigen großen Tabellen machen und müsste bei Änderungen noch auf eine weitere Procedure achten, deshalb bin ich froh, wenn ich das * behalten darf.

Hat jemand eine Idee?

Vielen Dank
Patrick
Patrick

Geändert von Ykcim (11. Jul 2019 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.841 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Tabelle vergleichen / Left Join bringt zu viele Werte

  Alt 11. Jul 2019, 12:06
SELECT a.* FROM...
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.093 Beiträge
 
Delphi 7 Professional
 
#3

AW: Tabelle vergleichen / Left Join bringt zu viele Werte

  Alt 11. Jul 2019, 12:27
Ich könnte natürlich statt select * from die einzelnen Felder auflisten.
Meiner Meinung nach das einzig sinnvolle Vorgehen. Und ja, bei Änderungen muss man diese dann vornehmen. Spart einem aber die Fehlersuchen, die aus Änderungen resultieren können. Und das müssen nicht unbedingt nur SQL-Fehler sein, sofern der Typ der Spalten übereinstimmt, können bei geänderter Spaltenreihenfolge durchaus die Daten in einer falschen Spalte landen und das muss man nicht zwingend sofort bemerken.
SQL-Code:
insert into kommentfaarchiev (benötigte Spalten)
  select benötigteSpalten from kommentfa a
    left join as400temp t on a.waaunr = t.waaunr and a.waaupo = t.waaupo
  where t.waaunr is null
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
646 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Tabelle vergleichen / Left Join bringt zu viele Werte

  Alt 11. Jul 2019, 12:51
Zitat:
SELECT a.* FROM...
Es kann so einfach sein...

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.599 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Tabelle vergleichen / Left Join bringt zu viele Spalten

  Alt 11. Jul 2019, 13:11
Also ich bin ja ein großer Freund von "Select *", das betrifft aber die Arbeit mit Bibliotheken, die damit auch umgehen können.
Dass Dir die * Dynamik nichts nutzt, wenn der Rest (gerade bei einem Insert) nicht damit klar kommt, wurde ja schon erwähnt.

In der Situation "Och Menno, ich möchte nicht immer soviel tippen (und wer hat sich diese besch.. Spaltennamen eigentlich ausgedacht?!" (400 ++ Spalten oder was weiß ich), die ja offenbar trotz allen IDE Zaubers oft ein Problem darstellt*, nehme ich immer die Dictionary Views der Datenbank, um die Select Clause abzufragen.

Also für mySQL:
Code:
SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'tbl_name'
Das ist nicht meine Erfindung, sondern glaub ich sehr verbreitet, Code Generierung allgemein ist ja recht praktisch.

Wenn man mag, kann man sich gleich noch das Komma ausgeben lassen. Oder bei mySQL meinetwegen auch noch diesen ganzen Mist mit Ticks oder Backticks anheften.
Man kann es auch einmal für alle Tabellen laufen lassen und sich das Ergebnis in Excel eintüten. Dann bequem nach Tabellen filtern (per Klick), was man braucht. Da besteht allerdings Veraltungsgefahr, aber Excel kann ja auch dynamisch DB-Daten anzeigen.
Copy/Paste ist jedenfalls unschlagbar gegen simple Tippfehler und spart auch Zeit, wenn es nicht nur um 5 Felder geht.

*gibt es nicht seit längerem einen DB Explorer in der IDE?
Gruß, Jo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf