Vinzenz Mai: Nochmal neu: mysql Afrage == FALSE, owohl sie in phpmyadmin geht

Beitrag lesen

Hallo,

Ich habe eine Tabelle mit Adressdaten und eine, in die ich lediglich dann etwas eintrage, wenn die Adresse ein bestimmtes Kriterium erfüllt. Dann allerdings mit zusätzlichen Daten. Beide Tabellen verbindet die AdressID.

Tab1:
AdressID, Name, Strasse, Ort

Trägt AdressID den Primärschlüssel dieser Tabelle?

Tab2:
ID, AdressID, Spalte1, Spalte2, Spalte3

auf der einen Seite gehe ich davon aus, dass zu jedem Eintrag in Tabelle Tab1 mehrere Einträge in Tabelle Tab2 existieren können, andererseits sollte in jedem Fall auf der Spalte AdressID ein Index liegen.

Query:

select DISTINCT
    r.AdressID,
    r.Name,
    r.Strasse,
    r.Ort,
    z.Spalte2
FROM tab1 r
LEFT JOIN tab2 z
ON r.AdressID = z.AdressID
WHERE
    AdressID = 10 AND
COALESCE(z.Spalte2, 0) = 0
ORDER BY r.AdressID DESC

  
Sorry, aber \*diese\* Abfrage kann maximal zwei Datensätze liefern (falls AdressID den Primärschlüssel in Tabelle tab1 trägt):  
  
Gib mir alle unterschiedlichen Datensätze zu einer bestimmten AdressID, wobei mich nur die Datensätze interessieren, zu denen es  
  
a) entweder keinen Eintrag in tab2 gibt,  
b) oder der zugehörige Eintrag in tab2 in der Spalte "Spalte2"  
   den Wert NULL oder 0 aufweist.  
  
Somit gibt es genau zwei mögliche Werte für Spalte2: nämlich 0 oder NULL.  
Wo sollen da 10 bis 15 Datensätze herkommen? Ich fürchte, Du hast zu stark vereinfacht.  
  
Wenn Du nur Datensätze mit einem bestimmten Wert in der Detailtabelle suchst (oder auch solche ohne zugeordneten Wert in der Detailtabelle), dann solltest Du diese Bedingung in der JOIN-Bedingung aufführen, nicht in der WHERE-Klausel mit einem zusätzlichen COALESCE.  
  
Wie dedlfix Dir bereits geschrieben hat, solltest Du Dir von MySQL den Ausführungsplan anzeigen lassen.  
  
  
  
Freundliche Grüße  
  
Vinzenz