# MySQL select im select und if



## RaVenC (12. September 2009)

Hi..
Hab (vermutlich ein kleines) Problem, wo ich gerade irgendwie auf'm schlauch steh :-(

Folgende SQL Anweisung (ich hab sie für hier einmal vereinfacht) funktioniert ganz gut, aber gefällt mir nicht, da ich so 2 mal die selbe Abfrage starten muss.. 


```
SELECT
  ...
  IF((SELECT x FROM z WHERE y=t.k LIMIT 1),(SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...
```

Sprich gibt "(SELECT x FROM z WHERE y=t.k LIMIT 1)" ein Ergebnis zurück, so soll a das Ergebnis sein, Ansonsten ist a die (php) Variable $h..
Mir gefällt dies nicht, da hier 2 mal "(SELECT x FROM z WHERE y=t.k LIMIT 1)" vorkommt..

Versucht man:

```
SELECT
  ...
  (SELECT x FROM z WHERE y=t.k LIMIT 1) AS temp
  IF(temp,temp,'$h') AS a
FROM
  ...
```
So wird einem "Unknown column 'temp' in 'field list'" um die Ohren geworfen..
Genauso bei SELECT x AS temp FROM ...

Bin langsam am verzweifeln 
Hoffe ihr könnt mir helfen 

Viele Grüße


----------



## RaVenC (12. September 2009)

bin mittlerweile selbst auf die Lösung des Problems gestoßen 


```
SELECT
  ...
  COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...
```

Nun würde ich dieses a allerdings gern in der WHERE clause verwenden..



```
SELECT
  ...
  COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...
WHERE
  ...
  b=a
```
Kommt bei mir wieder
"Unknown column 'a' in 'where clause'"
Also bin ich weiterhin am verzweifeln


----------



## RaVenC (12. September 2009)

ZU leicht oder zu schwer?


----------



## Biber2 (13. September 2009)

Moin RavenC,


RaVenC hat gesagt.:


> ZU leicht oder zu schwer?



Zu leicht.
Aber ich geb Dir mal einen Tipp.
Du hast gar kein Feld a, dass Du abfragen kannst, sondern nur eine virtuelle tabelle a mit einem Feld x.


```
Code:  
SELECT
  ...
  COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h') AS a
FROM
  ...
WHERE
  ...
  b=a.x
```

Grüße
Biber


----------



## RaVenC (13. September 2009)

hi, danke dir für die Antwort,
allerdings wird mir so auch der Error um die Ohren gehauen 
bzw: Unknown column 'a.x' in 'where clause'


----------



## RaVenC (14. September 2009)




----------



## arkanoid (14. September 2009)

Hey raven,
warum versuchst du zwanghaft das ganze in ein Query zu legen?
Speicher dir das Ergebnis des einen Query als Result in eine Variable, werte sie aus und gehe dann optionale Querys an....

SQL-Statements komplex verschachteln mag vielleicht ein interessantes Thema sein, doch irgendwann verfehlt es aus meiner Erfahrung erstens schnell einen Zeit-Nutzen-Faktor und zweitens verliert man schneller die Übersicht (z..B. beim Debugging!!)


----------



## RaVenC (14. September 2009)

Hi John 
Das Problem bei der Sache ist, dass ich dann von meinen max 10 Query die ich mir pro Seite als Ziel gesetzt habe, auf über 100 Querys kommen kann, was wiederum den Seitenaufbau verlangsamt..
Und da geht es eigentl. um jede Millisekunde...
Werde morgen mal auf der Arbeit nen Kollegen fragen ob dem was einfällt...

Was mich auch wunder ist, das zB das nicht geht:

```
SELECT
...
b AS a
FROM
...
WHERE
...
b=COALESCE((SELECT x FROM z WHERE y=t.k LIMIT 1),'$h')
```

Mit nem Select in der where clause stürzt gleich die ganze Datenbank ab -.-'
Wobei es beim WHERE in Update (glaub ich) funktioniert..


----------

