sql >> Databasteknik >  >> RDS >> Mysql

Använder 'LIKE' med resultatet av en SQL-underfråga

Först, den här frågan bör fungerar inte bra:

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

Eftersom WHERE LIMIT 1 är inte korrekt SQL. Och du bör lära dig att använda korrekt join syntax. Förmodligen tänker du:

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

Du kan tänkas lägga till LIKE istället för = och '%' i underfrågan:

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

Men jag skulle skriva detta med 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, '%')
             );

Detta gör inte exakt samma sak som din fråga. Det gör något mer rimligt. Istället för att jämföra ett slumpmässigt namn från underfrågan kommer det att avgöra om det finns några matchar i underfrågan. Det verkar vara en mer rimlig avsikt med frågan.



  1. Hur man korrekt GROUP BY i MySQL?

  2. Infoga i en MySQL-tabell eller uppdatera om det finns

  3. Har problem med UnixODBC, FreeTDS och PyODBC

  4. Ska jag använda MyISAM- eller InnoDB-tabeller för min MySQL-databas?