# Wenn NULL oder Leer, soll eine andere Zeile mit der ParentID abgefragt werden.



## tvtotal (28. Mai 2013)

Hallo zusammen,

wie im Titel schon geschrieben, möchte eine Abfrage erstellen, die über alle Spalten geht. Wenn eine bestimmte Spalte, z.B. "name", leer ist, soll die Zeile, bei der die ID mit der PARENTID übereinstimmt, abgefragt werden. Bei der Spalte attr muss ich das auch bewerkstelligen.

Sinngemäß soll es dann so aussehen.


```
SELECT ALL FROM arts UND WENN name NULL ODER LEER dann SELECT name FROM arts WHERE id = "parentid dieser Zeile"
```

Danke & Gruß

tvtotal


----------



## Yaslaw (28. Mai 2013)

Nimm alle wo der Name nicht NULL ist und füge mit einem UNION die anderen an

```
-- Alle bei denen der Name nicht NULL ist
SELECT 
    a.id,
    a.name
FROM 
    arts a
WHERE 
    name IS NOT NULL
-- und die bei denen der Name NULL ist
UNION ALL
SELECT 
    a.id,
    b.name
FROM 
    arts a,
    arts b
WHERE
    name IS NULL
    AND a.id = b.id
```

Oder noch schöner. Suche zu jedem ein sein Parent (falls vorhanden, darum der LEFT JOIN) und nimm den ersten Treffer beim Namen

```
SELECT 
    a.id,
    IFNULL(a.name, IFNULL(b.name, 'na')) AS name
FROM 
    arts a,
    LEFT JOIN arts b
    ON a.id = b.id
```


----------



## tvtotal (28. Mai 2013)

Hallo & Danke,

beim ersten bekomme ich :


```
Column 'name' in where clause is ambiguous
```

Wenn ich es ein wenig ändere (ganz unten a.name statt name), funktioniert die Abfrage, aber name bleibt leer (da, wo das Feld leer ist):


```
-- Alle bei denen der Name nicht NULL ist
SELECT 
    a.id,
    a.name
FROM 
    arts a
WHERE 
    name IS NOT NULL
-- und die bei denen der Name NULL ist
UNION ALL
SELECT 
    a.id,
    b.name
FROM 
    arts a,
    arts b
WHERE
    a.name IS NULL
    AND a.id = b.id
```

Grüße

tvtotal

PS: Es ist übrigens MySQL


----------



## Yaslaw (28. Mai 2013)

Die Zweite Lösung?


----------



## tvtotal (28. Mai 2013)

Da kommt folgendes:


```
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN arts b ON a.id = b.id LIMIT 0, 30' at line 6
```

Ich glaub, da fehlt auch die parentid.


----------



## Yaslaw (28. Mai 2013)

Ich habe dort ein Komma zuviel. Nimm es raus.


----------



## tvtotal (2. Juni 2013)

Sorry wegen der späten Antwort. Das 2. geht. Vielen Dank.


----------

