2013-08-03 11 views
16

Ho una domanda che sembra qualcosa di simile:SQL dalla subselect in cui la clausola

SELECT a, b, c, 
    (SELECT d from B limit 0,1) as d 
FROM A 
WHERE d >= 10 

ottengo il risultato che voglio quando faccio funzionare la query senza la clausola where ma quando aggiungo il where clausola la query non riesce.

Qualcuno ha un suggerimento su come risolverlo?

risposta

38

Non è possibile utilizzare un alias di colonna nella clausola WHERE.

Così si sia avvolgere la query in una di selezione esterna e applicare la sua condizione non

SELECT * 
    FROM 
(
    SELECT a, b, c, 
    (SELECT d FROM B LIMIT 0,1) d 
    FROM A 
) q 
WHERE d >= 10 

oppure è possibile introdurre tale condizione in HAVING clausola invece

SELECT a, b, c, 
    (SELECT d FROM B LIMIT 0,1) d 
    FROM A 
HAVING d >= 10 

Un altro approccio è quello di utilizzare CROSS JOIN e applica le tue condizioni nella clausola WHERE

SELECT a, b, c, d 
    FROM A CROSS JOIN 
(
    SELECT d FROM B LIMIT 0,1 
) q 
WHERE d >= 10 

Ecco la demo SQLFiddle per tutte le query sopra menzionate.

+0

molto utile, +1 per menzionare l'utilissimo SqlFiddle :) – Gregor

+1

Bene che tu abbia menzionato HAVING, dato che è sempre stato ritenuto utile solo con GROUP BY. –

+0

SQLFiddle non funziona per me. – geoidesic

1

È questo quello che vuoi?

SELECT a, b, c, 
    B.d 
FROM A, (SELECT d from B limit 0,1) B 
WHERE B.d >= 10 
+0

No, perché se per esempio d non è> = 10 questa colonna sarebbe semplicemente vuota ma voglio se la clausola where non corrisponde a quella non verrà visualizzata l'intera riga – Chris

+1

@Chris c'è qualche relazione tra TableA e TalbeB? –

+0

Scusate, non ho l'ambiente da testare. Ho cambiato il sql. Che ne dici di questa volta? – Clxy

Problemi correlati