Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di "LIKE" con il risultato di una sottoquery SQL

Innanzitutto, questa query dovrebbe non funziona bene:

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

Perché WHERE LIMIT 1 non è corretto SQL. E dovresti imparare a usare correttamente join sintassi. Presumibilmente, intendi:

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

Si potrebbe plausibilmente aggiungere LIKE invece di = e '%' nella sottoquery:

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

Ma lo scriverei 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, '%')
             );

Questo non fa esattamente la stessa cosa della tua query. Fa qualcosa di più ragionevole. Invece di confrontare un nome casuale dalla sottoquery, determinerà se ce ne sono qualsiasi corrisponde nella sottoquery. Sembra un'intenzione più ragionevole per la query.