AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [gelöst] Join für Zeilen nicht Spalten

[gelöst] Join für Zeilen nicht Spalten

Ein Thema von Thanatos81 · begonnen am 20. Feb 2006 · letzter Beitrag vom 21. Feb 2006
Antwort Antwort
Thanatos81
(Gast)

n/a Beiträge
 
#1

[gelöst] Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 14:34
Datenbank: MySQL • Version: 4.1.13 • Zugriff über: ZEOS
Tach zusammen!

Folgendes Problem: Ich habe in meiner DB zwei Tabellen gleicher Struktur, also z.B.

Tabelle temp
------------
LfdNr Integer
Name VarChar
Borname VarChar



Tabelle haupt
-------------
LfdNr Integer
Name VarChar
Vorname VarChar

Nun würde ich ja mittel
SELECT Vorname, Name FROM temp und
SELECT Vorname, Name FROM haupt zwei Resultsets mit den Daten aus jeweiliger Tabelle bekommen. Gibt es eine Möglichkeit, diese beiden Resultsets miteinander zu verknüpfen, so dass erst die Daten aus temp und dann die aus haupt angezeigt werden?

Vielen Dank im Voraus,
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 14:40
Hallo Thomas,

UNION heißt der Operator, mit dem du zwei homogene result sets vereinigen kannst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#3

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 14:41
Danke! Ich wusste doch, dass es sowas gab, nur wenn man den noch nicht benutzt hat, fällt zumindest mir das Namen merken so schwer
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#4

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 16:09
Vielleicht darf ich ja nochmal stören
Mein Ansatz war jetzt Folgender:
SQL-Code:
    (
        SELECT "Probenbezeichnung" AS Parameter,
            MAX(IF(labkopf.lfdnr = "1472",labkopf.Probenbezeichnung,"")) AS "LG200501469",
            MAX(IF(labkopf.lfdnr = "1556",labkopf.Probenbezeichnung,"")) AS "LG200501553"
        FROM labkopf, labparameter
        LEFT JOIN labpositionen ON labpositionen.parameter = labparameter.lfdnr
        WHERE labkopf.lfdnr = labpositionen.berichtsnr
              AND labpositionen.BerichtsNr IN (1472, 1556)
              AND labPositionen.Parameter IN (85)
        GROUP BY labparameter.lfdnr
    )

UNION ALL

    (
        SELECT labparameter.name AS Parameter,
            MAX(IF(labkopf.lfdnr = "1472",labpositionen.wert,"")) AS "LG200501469",
            MAX(IF(labkopf.lfdnr = "1556",labpositionen.wert,"")) AS "LG200501553"
        FROM labkopf, labparameter
        LEFT JOIN labpositionen ON labpositionen.parameter = labparameter.lfdnr
        WHERE labkopf.lfdnr = labpositionen.berichtsnr
              AND labpositionen.BerichtsNr IN (1472, 1556)
              AND labPositionen.Parameter IN (85)
        GROUP BY labparameter.lfdnr
    )
ORDER BY Parameter
Leider bekomme ich nun eine Fehlermeldung:
Code:
Illegal mix of collations for operation 'UNION'
Also ist er anscheinend nicht mit meinen Vergleichen nicht zufrieden, ,die Frage ist nur warum... Jemand ne Idee für mich.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 16:59
Sieht so aus, als würde dem Literal "Probenbezeichnung" im ersten SELECT eine andere COLLATION zugewiesen, als der Spalte labparameter.name im zweiten SELECT. Du musst vielleicht einmal prüfen, welchen default charset der MYSQL Server bei dir verwendet, und welche Festlegungen für die besagte Spalte getroffen wurden.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.098 Beiträge
 
Delphi 12 Athens
 
#6

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 17:09
Ist es eigentlich auch erlaubt/möglich eine Abfrage über 2 bis 3 Tabellen zu erstellen, also nur über die gleichen Felder (z.B. LfdNr und Name).

Tabelle1: LfdNr, Name, irgendwas
Tabelle2: LfdNr, Name, irgendwas2, irgendwas3

Und wenn möglich noch einen gemeinsamen automatischen Index für die Tabellen einzustellen?
(also z.B. LfdNr als eindeutige ID in den 2-3 Tabellen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 17:48
Du kannst mit dem UNION operator mehrere result sets zu einem einzigen vereinigen. Nicht die Feldnamen müssen gleich sein, sondern die Felddefinitionen (homogene result sets).

Ein gemeinsamer Schlüsselgenerator für mehrere Tabellen ist machbar. Wozu brauchst du sowas?

marabu
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#8

Re: Join für Zeilen nicht Spalten

  Alt 20. Feb 2006, 19:08
Zitat von marabu:
Sieht so aus, als würde dem Literal "Probenbezeichnung" im ersten SELECT eine andere COLLATION zugewiesen, als der Spalte labparameter.name im zweiten SELECT. Du musst vielleicht einmal prüfen, welchen default charset der MYSQL Server bei dir verwendet, und welche Festlegungen für die besagte Spalte getroffen wurden.

marabu
Jupp, das wars. Mein Kollege hatte die Datenbank mit
Code:
DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
angelegt und ich meine Tabellen mit
Code:
DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
Wieso sagt ein Kollege einem sowas auch nicht

Danke dir nochmal, marabu!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.098 Beiträge
 
Delphi 12 Athens
 
#9

Re: Join für Zeilen nicht Spalten

  Alt 21. Feb 2006, 12:59
Zitat von marabu:
Du kannst mit dem UNION operator mehrere result sets zu einem einzigen vereinigen. Nicht die Feldnamen müssen gleich sein, sondern die Felddefinitionen (homogene result sets).
OK, dann ist es ja gut

Also wenn ich jetzt dennoch einige Felder drin hab, mit unterschiedlichen Felddefinitionen, aber diese Felder nicht mit ins Suchergebnis mit aufnehme, dann sollte es also auch gehen?

Zitat von marabu:
Ein gemeinsamer Schlüsselgenerator für mehrere Tabellen ist machbar. Wozu brauchst du sowas?
Ich nehme ja den Index auch gleichzeitig mit als Dateiname und speichere nur die ID für die Dateiendung mit ab, somit kann es also nicht passieren, wenn ich zwei Dateien mit dem selben Namen in der Liste hab, sich die Dateien gegenseitig überschreiben.
Im Grunde ginge es auch ohne einen gemeinsamen Index, aber mit wäre es auch mal möglich die Dateien von 2... Dateilisten in einem Verzeichnis abzulegen, ohne daß es zu Überschneidungen kommen kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 12:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz