sql >> Databáze >  >> RDS >> Mysql

Použití 'LIKE' s výsledkem poddotazu SQL

Nejprve tento dotaz měl by nefunguje dobře:

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

Protože WHERE LIMIT 1 není správné SQL. A měli byste se naučit používat správné join syntax. Pravděpodobně máte v úmyslu:

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

Mohli byste přidat LIKE místo = a '%' v dílčím dotazu:

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

Ale napsal bych to pomocí 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, '%')
             );

Nedělá to přesně to samé jako váš dotaz. Dělá to něco rozumnějšího. Namísto porovnávání jednoho náhodného jména z dílčího dotazu určí, zda existují nějaké shoduje se v poddotazu. To se zdá být pro dotaz rozumnější.



  1. Režie sledování vytváření #temp tabulky

  2. Pořadí jako výchozí hodnota pro sloupec

  3. Výsledkem rozdělení je dotaz na součet

  4. Spuštění funkce ORDER BY RAND() v mysql trvá dlouho