Bruno: MySql: Gibt es solch eine Abfragemöglichkeit?

Hallo Forum,

ich habe eine allgemeine Frage zu mysql. Gibt es die Möglichkeit, in einer Query eine Abfrage nach folgender Art zu gestalten?

Suche mir alle Details zu Artikel mit der ID=x aus der Tabelle "Artikeldetails", falls dort welche verzeichnet sind und falls dort keine verzeichnet sind, nimm die Details zu dieser ID=x aus der Tabelle "Artikel".

Liest sich kompliziert, aber der Hintergrund ist folgender:

Ich möchte möglichst wenig Datenredundanz erzeugen, deshalb möchte ich in einer vorhandenen Datenmodellierung die Artikeldetails nur dann zusätzlich in einer separaten Tabelle aufnehmen, wenn diese geändert wurden.

Ich weiß selber, dass hierzu eine komplette Normalisierung deutlich besser geeignet gewesen wäre, aber ich muß jetzt gerade mal damit leben, was ich vorgegeben habe.

Freundliche Grüße, Bruno

  1. Moin!

    Eventuell solltest Du dir die Ablaufsteuerungsfunktionen von mySql anschauen.

    --
    Vergesst Chuck Norris.
    Sponge Bob kann unter Wasser grillen!
  2. Suche mir alle Details zu Artikel mit der ID=x aus der Tabelle "Artikeldetails", falls dort welche verzeichnet sind und falls dort keine verzeichnet sind, nimm die Details zu dieser ID=x aus der Tabelle "Artikel".

    select * from artikel  
      where artikel.id = x  
        and (select count(*)  
               from artikeldetails  
              where artikeldetails.id = x) = 0  
      
    union  
      
    select * from artikeldetails  
     where artikeldetails.id = x;
    

    So sähe eine mögliche Lösung mit Hilfe von Subqueries aus.

    lG,
    Gerhard

    1. moin,

      select * from artikel

      where artikel.id = x
          and (select count(*)
                 from artikeldetails
                where artikeldetails.id = x) = 0

      union

      select * from artikeldetails
      where artikeldetails.id = x;

      
      >   
      > So sähe eine mögliche Lösung mit Hilfe von Subqueries aus.  
        
        
      mit sicherheit nicht, erstens nicht von der fachlichen vorgabe und zweitens wirst du bei der abfrage mit aller wahrscheinlichkeit eine fehlermeldung bekommen. zu UNION anstelle von UNION ALL sage ich ja schon nichts mehr....  
        
      ILja
      
      1. mit sicherheit nicht, erstens nicht von der fachlichen vorgabe und zweitens wirst du bei der abfrage mit aller wahrscheinlichkeit eine fehlermeldung bekommen. zu UNION anstelle von UNION ALL sage ich ja schon nichts mehr....

        Ohne Gegenargumente wirst du mich schwer überzeugen können. WARUM ist es fachlich nicht korrekt und wozu bräuchte ich hier UNION ALL? Es wird sowieso immer nur eine der beiden Queries Zeilen liefern.

  3. Kannst du mir eventuell genau sage wie die Spalten heissen?
    Einen Foreign key von Artikeldetails zu den Artikel gibt es schon oder?

    lg Flash

  4. Hallo Forum,

    ich habe eine allgemeine Frage zu mysql. Gibt es die Möglichkeit, in einer Query eine Abfrage nach folgender Art zu gestalten?

    Suche mir alle Details zu Artikel mit der ID=x aus der Tabelle "Artikeldetails", falls dort welche verzeichnet sind und falls dort keine verzeichnet sind, nimm die Details zu dieser ID=x aus der Tabelle "Artikel".

    Liest sich kompliziert, aber der Hintergrund ist folgender:

    Ich möchte möglichst wenig Datenredundanz erzeugen, deshalb möchte ich in einer vorhandenen Datenmodellierung die Artikeldetails nur dann zusätzlich in einer separaten Tabelle aufnehmen, wenn diese geändert wurden.

    Ich weiß selber, dass hierzu eine komplette Normalisierung deutlich besser geeignet gewesen wäre, aber ich muß jetzt gerade mal damit leben, was ich vorgegeben habe.

    Freundliche Grüße, Bruno

    Hi Bruno,

    wenn ich es richtig verstehe liegen in der Tabelle Artikel immer alle Artikel, in den Artikeldetails nur wenn spezielle Details angegeben wurden?

    Ich weiß nicht genau was Du erreichen willst, aber evtl. wäre es eine Möglichkeit:

      
    SELECT article_id, x, y, z  
    FROM tbl_article  
    LEFT JOIN tbl_article_detail on article_detail_id = article_id  
    WHERE article_id = 1234  
    
    

    Damit bekommst Du immer die Daten aus tbl_article, und sofern vorhanden, die Daten aus der Article-Detail. Sind keine Daten vorhanden sind die selektierten Felder halt null. Das ganze dann einfach im Script abfragen und entsprechend die benötigten Felder verwenden.

    mfg Flanna