Datenbank-SQL-Befehl



  • Hallo Leute.

    Ich möchte in einer Tabelle eine neue Spalte hinzufügen, welche aus einer anderen Tabelle nach dem gleichen Schlüssel sucht und dort aus der entsprechenden Spalte z.B. den Namen zurückgibt.

    SELECT Index, neu AS Name FROM tabelle

    "neu" soll also hier den Namen erhalten, der in einer anderen Tabelle unter dem Index "Index" steht. Was muss ich hier für "neu" einsetzen?

    Danke für eure Hilfe.

    MFG, Red.



  • AFAIK musst Du das Attribut zuerst mit

    ALTER TABLE bla ADD blubb ...
    

    erweitern, und kannst dann mit

    UPDATE bla SET blubb=(SELECT blubb FROM blort WHERE blort.key=bla.key)
    

    die Werte einfüllen. Wenn Du eine komplett neue Tabelle anlegen willst, ginge das alternativ mit

    CREATE TABLE bumm AS SELECT blort.blubb,bla.foo,bla.bar FROM blort, bla WHERE bla.key=blort.key
    

    .



  • Ich nutze jetzt von c die ADOQuery Kompo.
    Jetzt möchte ich meine Datenbank aber nicht verändern.
    Es soll nur zur Anzeige gebracht werden über ein DBGrid.
    Damit entfallen die Befehle ALTER und UPDATE sowie CREATE.

    SELECT blubb FROM blort WHERE blort.key=bla.key
    

    bzw.

    SELECT blort.blubb,bla.foo,bla.bar FROM blort, bla WHERE bla.key=blort.key
    

    Das hilft mir schon ein wenig weiter. Aber wie sage ich hier meiner ADOQuery, dass sie zusätzlich auf die Tabelle "blort" zugreifen soll, wenn ich dort doch schon hinter dem Befehl FROM "bla" stehen habe 😕?

    PS: Und warum kennt die ADOQuery Komponente den SQL-Befehl TIME_FORMAT nicht?
    Jetzt habe ich eine Spalte, die aus zwei DATETIME-Spalten berechnet wird und kann nur eine Float-Zahl anzeigen :(.



  • Tja, jetzt bin ich etwas am Ende, denn ich kenne zwar natives SQL, aber weder ADOQuery noch DBGrid...
    Normalerweise setzt Du bei einem Select über mehr als eine Tabelle einfach alle betroffenen Tabellennamen mit Kommas getrennt hinter das FROM:

    SELECT a.erstes, a.zweites, b.drittes
    FROM a, b
    WHERE a.schlüssel = b.schlüssel
    


  • Ahja. Das könnte sogar klappen. Muss ich heute Abend mal probieren. Schaffe ich jetzt nicht mehr. Danke

    Eine Frage habe ich noch. Wie kann ich eine leere Spalte (Also nicht einfach "") sondern NULL abfragen? Ich dachte, dass es mit NULL geht. Geht aber nicht :(.



  • ...
    WHERE a.wert IS NULL
    ...
    

    Eine Abfrage von NULL gegen <, >, = etc. ist immer FALSCH.



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hmmmm. Ich habe eine ADOTable benutzt und den Filter so verwendet:

    Filter = "Ankunft='' or Ankunft=NULL";
    

    Für einen leeren String funktioniert es auch. Dieser ist jedoch am Anfang noch nicht vorhanden. Beim neu anlegen ist die Spalte "Ankunft" leer. Also NULL.
    Erst wenn ich sie bearbeite, wird eine leere oder eine gefüllte Zeichenkette eingetragen. Trotzdem funktioniert der Filter nicht 😕.

    Gibt es da noch eine andere Lösung?

    Das andere Problem mit den zwei Tabellen hat genau so,

    SELECT a.erstes, a.zweites, b.drittes FROM a, b WHERE a.schlüssel = b.schlüssel
    

    wie du es beschrieben hast, funktioniert. Danke



  • wlkikiv:

    Miq schrieb:

    Eine Abfrage von NULL gegen <, >, = etc. ist immer FALSCH.

    oder anders (und hoffentlich deutlicher):

    Filter = "Ankunft='' or Ankunft IS NULL";
    

Anmelden zum Antworten