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.