Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando 'LIKE' com o resultado de uma subconsulta SQL


Primeiro, esta consulta deve não estar funcionando bem:
SELECT *
From Customers
WHERE Customers.ContactName = (SELECT FirstName
                               from Employees as E, orders as O
                               WHERE LIMIT 1);

Porque WHERE LIMIT 1 não é SQL adequado. E você deve aprender a usar o join adequado sintaxe. Presumivelmente, você pretende:
SELECT c.*
From Customers c
WHERE c.ContactName = (SELECT FirstName
                       FROM Employees as E JOIN
                            Orders as O
                            ON . . .
                       LIMIT 1
                      );

Você poderia adicionar LIKE em vez de = e '%' na subconsulta:
WHERE c.ContactName LIKE (SELECT CONCAT('%', FirstName, '%') . . .

Mas eu escreveria isso 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, '%')
             );

Isso não faz exatamente a mesma coisa que sua consulta. Faz algo mais razoável. Em vez de comparar um nome aleatório da subconsulta, ele determinará se há algum correspondências na subconsulta. Essa parece uma intenção mais razoável para a consulta.