web-dev-qa-db-fra.com

Colonne d'utilisation SQL de la sous-sélection de la clause where

J'ai une requête qui ressemble à ça:

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

J'obtiens le résultat souhaité lorsque j'exécute la requête sans la clause where mais lorsque j'ajoute la clause where, la requête échoue.

Quelqu'un a-t-il une suggestion pour résoudre ce problème?

19
Chris

Vous ne pouvez pas utiliser d'alias de colonne dans la clause WHERE.

Donc, vous pouvez soit envelopper votre requête dans une sélection externe et y appliquer votre condition

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

ou vous pouvez introduire cette condition dans la clause HAVING à la place

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

Une autre approche consiste à utiliser CROSS JOIN et appliquez votre condition dans la clause WHERE

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

Voici SQLFiddle démo pour toutes les requêtes mentionnées ci-dessus.

44
peterm

C'est ce que tu veux?

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