sql >> Base de Datos >  >> RDS >> Mysql

Usando 'LIKE' con el resultado de una subconsulta SQL

En primer lugar, esta consulta debe no funciona bien:

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

Porque WHERE LIMIT 1 no es SQL adecuado. Y deberías aprender a usar join adecuado sintaxis. Presumiblemente, su intención es:

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

Posiblemente podría agregar LIKE en lugar de = y '%' en la subconsulta:

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

Pero escribiría esto usando 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, '%')
             );

Esto no hace exactamente lo mismo que su consulta. Hace algo más razonable. En lugar de comparar un nombre aleatorio de la subconsulta, determinará si hay alguno coincidencias en la subconsulta. Esa parece una intención más razonable para la consulta.