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

Brug af 'LIKE' med resultatet af en SQL-underforespørgsel

For det første bør denne forespørgsel fungerer ikke fint:

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

Fordi WHERE LIMIT 1 er ikke korrekt SQL. Og du bør lære at bruge korrekt join syntaks. Formentlig har du til hensigt:

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

Du kunne tænkes at tilføje LIKE i stedet for = og '%' i underforespørgslen:

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

Men jeg ville skrive dette ved at bruge 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, '%')
             );

Dette gør ikke præcis det samme som din forespørgsel. Det gør noget mere fornuftigt. I stedet for at sammenligne et tilfældigt navn fra underforespørgslen, vil det afgøre, om der er nogle matcher i underforespørgslen. Det virker som en mere rimelig hensigt med forespørgslen.



  1. Beregning af medianen med Mysql

  2. MySqlDataReader.GetStream() kaster IndexOutOfRangeException

  3. MySQL join-tabeller, hvor tabelnavnet er et felt i en anden tabel

  4. gcc vil ikke kompilere og køre MySQL C-biblioteker