none
Abfrage ergibt null RRS feed

  • Frage

  • Hallo,

    ich nutze folgende Abfrage zur Erstellung einer XML Ausgabe.

    select cms_layouts.*, cms_containers.* from cms_layouts,cms_containers 
    where cms_layouts.LayoutID=cms_containers.LayoutID and cms_layouts.LayoutID=36 order by cms_containers.ContainerOrder  
    for xml auto, ELEMENTS,TYPE, ROOT ('Layout')

    Die Werte frage ich aus 2 Tabellen ab - cms_layouts und cms_containers. In der Tabelle cms_containers können 0 bis mehrere Datensätze mit der LayoutID existieren, welche dem Layout aus Tabelle cms_layouts zugeordnet ist.

    Sobald in der Tabelle cms_containers kein Datensatz existiert zum jeweiligen Layout, erhalte ich null. Ich möchte jedoch auch in diesem Fall zumindest die Daten aus dem Datensatz aus der Tabelle cms_layouts.

    Wie kann ich das lösen?

    Gruß

    Reiner

    Dienstag, 17. April 2012 09:11

Antworten

  • Hallo Reiner,

    Du verwendest hier ein impliziert formuliertes INNER JOIN; da ist das halt so, das Du kein Ergebnis erhälst, wenn es keine korresponideren Daten gibt.

    Ändere es in ein OUTER JOIN um:

    select cms_layouts.*, cms_containers.* 
    from cms_layouts 
         LEFT JOIN cms_containers 
            ON cms_layouts.LayoutID = cms_containers.LayoutID 
    WHERE cms_layouts.LayoutID=36 
    order by cms_containers.ContainerOrder  
    for xml auto, ELEMENTS,TYPE, ROOT ('Layout')


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 17. April 2012 09:23
  • Hallo Rainer,

    arbeite mit JOIN, dann kommst Du in der Regel besser weg :) In deinem Fall wäre das ein LEFT JOIN.

    SELECT   cl.*,
             cc.*
    FROM     cms_layouts cl
             LEFT JOIN cms_containers cc ON cl.LayoutID = cc.LayoutID
    WHERE    cl.LayoutID = 36
    ORDER BY cc.ContainerOrder  
    FOR      XML AUTO,
             ELEMENTS,
             TYPE,
             ROOT ('Layout')

    Ggfs. ist da noch ein kleiner Fehler drin, vom Grund her sollte es aber passen.

    BTW: Ich hasse den Editor bzw. dessen "Codeeinfügeteil". Es kann doch echt nicht so schwer sein, da dieselbe Schriftart zu nehmen wie im Dialog, mit dem man den Code einfügen soll.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    Dienstag, 17. April 2012 09:28
    Moderator

Alle Antworten