Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de 'LIKE' avec le résultat d'une sous-requête SQL

Tout d'abord, cette requête devrait ne fonctionne pas correctement :

SELECT *
From Customers
WHERE Customers.ContactName = (SELECT FirstName
                               from Employees as E, orders as O
                               WHERE LIMIT 1);

Parce que WHERE LIMIT 1 n'est pas le bon SQL. Et, vous devriez apprendre à utiliser le bon join syntaxe. Vraisemblablement, vous avez l'intention :

SELECT c.*
From Customers c
WHERE c.ContactName = (SELECT FirstName
                       FROM Employees as E JOIN
                            Orders as O
                            ON . . .
                       LIMIT 1
                      );

Vous pourriez éventuellement ajouter LIKE au lieu de = et '%' dans la sous-requête :

WHERE c.ContactName LIKE (SELECT CONCAT('%', FirstName, '%') . . .

Mais j'écrirais ceci en utilisant EXISTS :

SELECT c.*
From Customers c
WHERE EXISTS (SELECT 1
              FROM Employees as E JOIN
                   Orders as O
                   ON . . .
              WHERE c.ContactName LIKE CONCAT('%', FirstName, '%')
             );

Cela ne fait pas exactement la même chose que votre requête. Il fait quelque chose de plus raisonnable. Au lieu de comparer un nom aléatoire de la sous-requête, il déterminera s'il y en a quelqu'un correspondances dans la sous-requête. Cela semble une intention plus raisonnable pour la requête.