AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SELECT UNIQUE????

Ein Thema von Schodn · begonnen am 14. Jan 2005 · letzter Beitrag vom 14. Jan 2005
Antwort Antwort
Schodn

Registriert seit: 15. Nov 2004
Ort: Admont
140 Beiträge
 
#1

SELECT UNIQUE????

  Alt 14. Jan 2005, 08:06
Ich möchte bei dieser Abfrag ein Unique auf das feld b.STOERGRUNDNR unique setzen. wo füge ich das ein?
mfg


Delphi-Quellcode:
        aqTmp.SQL.Add( 'SELECT a.APNR, a.APGRPNR, b.APGRPNR, b.STOERGRUNDNR, c.BEZEICH, c.STOERGRUND' +
          ' FROM AP a' +
            ' INNER JOIN STOERGRZUAPGRPNR b' +
              ' ON a.APGRPNR = b.APGRPNR or b.APGRPNR = :Param2' +
                ' INNER JOIN STOERGRUNDBDE c' +
                  ' ON b.STOERGRUNDNR = c.STOERGRUND' +
                    ' WHERE a.APNR = :Param order by c.STOERGRUND');
        aqTmp.Parameters.ParamByName('Param').Value := cb_maschinen.Text;
        aqTmp.Parameters.ParamByName('Param2').Value := '0';
  Mit Zitat antworten Zitat
PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#2

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 08:41
Zitat von Schodn:
Ich möchte bei dieser Abfrag ein Unique auf das feld b.STOERGRUNDNR unique setzen. wo füge ich das ein?
mfg


Delphi-Quellcode:
        aqTmp.SQL.Add( 'SELECT a.APNR, a.APGRPNR, b.APGRPNR, b.STOERGRUNDNR, c.BEZEICH, c.STOERGRUND' +
          ' FROM AP a' +
            ' INNER JOIN STOERGRZUAPGRPNR b' +
              ' ON a.APGRPNR = b.APGRPNR or b.APGRPNR = :Param2' +
                ' INNER JOIN STOERGRUNDBDE c' +
                  ' ON b.STOERGRUNDNR = c.STOERGRUND' +
                    ' WHERE a.APNR = :Param order by c.STOERGRUND');
        aqTmp.Parameters.ParamByName('Param').Value := cb_maschinen.Text;
        aqTmp.Parameters.ParamByName('Param2').Value := '0';
Hallo,
das UNIQUE bezieht sich immer auf die gesamte Ausgabe-Row; man schreibt SELECT UNIQUE...
Wenn es also pro Ausprägung von STOERGRUND mehrere Inhalte der anderen Felder gibt, bekommst du auch mehrere Rows zurück.
Wenn es in der Ausgabe immer nur eine Row pro STOERGRUND geben soll, geht das nur mit Aggregat-Funktionen, aber dann solltest du genau beschreiben, was denn rauskommen soll.

Bis dann

Peter
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat
Neelix

Registriert seit: 30. Nov 2004
Ort: Im Delta-Quadranten
84 Beiträge
 
#3

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 08:46
Zitat von Schodn:
Ich möchte bei dieser Abfrag ein Unique auf das feld b.STOERGRUNDNR unique setzen.
Heißt das nicht DISTINCT? UNIQUE verwendet man doch bei CREATE INDEX!
  Mit Zitat antworten Zitat
PRehders

Registriert seit: 31. Okt 2003
Ort: Hamburg
42 Beiträge
 
#4

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 09:21
Zitat von Neelix:
Zitat von Schodn:
Ich möchte bei dieser Abfrag ein Unique auf das feld b.STOERGRUNDNR unique setzen.
Heißt das nicht DISTINCT? UNIQUE verwendet man doch bei CREATE INDEX!
früh am Morgen sollte man es lassen...
stimmt natürlich, aber da es in einem SELECT steht, hat mein krauses Hirn es gleich in ein DISTINCT umgewandelt...

Nixdestotrotzdem: War das jetzt eigentlich gemeint, oder habe ich noch anderes in den einen oder anderen falschen Hals bekommen?

Gruß

Peter
Peter Rehders
Man sollte niemanden ernst nehmen, der sich ernst nimmt.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 10:01
Zitat von Schodn:
..ein Unique auf das feld b.STOERGRUNDNR unique setzen...
Ein unique Feld "setzt" man, um sicherzustellen, daß wirklich nur ein Datensatz mit gewissen, möglicherweise auch aus mehreren Feldern zusammengesetzen Eigenschaften überhaupt angelegt wird. Doppelte Einträge erzeugen dann eine Fehlermeldung und werden nicht gespeichert. In diesem Fall könnte man hierzu z.B. die Nr. verwenden, sofern sie fortlaufend ist.

Mit SELECT hat das aber alles nichts zu tun.
Gruß
Hansa
  Mit Zitat antworten Zitat
Neelix

Registriert seit: 30. Nov 2004
Ort: Im Delta-Quadranten
84 Beiträge
 
#6

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 10:36
Zitat von Hansa:
Ein unique Feld "setzt" man,
Ich weiß nicht, ob das bei Interbas/Firebird anders ist, aber ein Feld wird nicht UNIQUE gesetzt sondern der Index über das Feld!
@Schodn: Es wäre sicherlich sinnvoll, wenn Du noch etwas zur Tabellenstruktur und die verwendete Datenbank mitteilen würdest.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 11:03
Das "setzt" steht nicht umsonst in "" Da das aber offensichtlich schon zu kompliziert ist formuliere ich das um. Man definiert in seiner Datenbank einen unique Index, um sicherzustellen, daß ein Datensatz nur in die DB eingetragen werden kann, sofern nicht schon einer mit den gleichen, in dem unique Index enthaltenen Feldinhalten existiert.

Man sorgt also von Anfang an dafür, daß solche Fälle gar nicht erst vorkommen können. Und deshalb gilt auch das :

Zitat:
Mit SELECT hat das aber alles nichts zu tun.
Gruß
Hansa
  Mit Zitat antworten Zitat
Neelix

Registriert seit: 30. Nov 2004
Ort: Im Delta-Quadranten
84 Beiträge
 
#8

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 11:14
Zitat von Hansa:
Man sorgt also von Anfang an dafür, daß solche Fälle gar nicht erst vorkommen können.
Wenn es das Datenmodell zuläßt. Deswegen ja auch meine Bitte, daß Schodn etwas mehr zur Tabellenstruktur schreibt. Bisher sieht es für mich so, als könne der Index in der genannten Tabelle gar nicht Unique sein, nämlich genau dann mehrere APGRPNR dieselbe STOERGRUNDNR haben können!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: SELECT UNIQUE????

  Alt 14. Jan 2005, 11:36
Neelix, jetzt blähe den Thread doch nicht unnötig auf. 8) Der wird sich schon wieder melden. Wie es aussieht herrscht allerdings immer noch Unklarheit, was unique und Index überhaupt ist.

Ein unique Index dient einzig und alleine dazu, zu verhindern, daß doppelte Werte in der DB vorkommen können. Manche denken, ein Index sei nur dazu da, eine Suche in der DB zu beschleunigen. So ist es aber nicht. Er dient auuch dazu, die Daten selber in Ordnung zu halten. Insbesondere ein unique Index ist für so was da.

Das alles hat aber wieder nichts damit zu tun, einen eindeutigen Datensatz aus der DB zu erhalten ! Dazu brauche ich keinen Index ! Ich kann auch ohne Index einen eindeutigen Wert erhalten (nicht speichern !!), wenn ich nur ausreichende viele Felder so mit WHERE verknüpfe, daß die Abfrage eindeutig wird !! Das kann ich auch in meinem Delphi-Programmm machen.

Darauf will er wohl hinaus. Und wer den Source etwas genauer betrachtet, der wird feststellen daß ein INNER JOIN verwendet wird, der wiederum seine Daten aus einem andern INNER JOIN erhält. Als allererstes würde ich versuchen, das etwas zu vereinfachen und mal über stored Procedures nachdenken.
Gruß
Hansa
  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 21:01 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