sql >> Database >  >> RDS >> Mysql

'LIKE' gebruiken met het resultaat van een SQL-subquery

Ten eerste moet deze zoekopdracht moeten niet goed werken:

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

Omdat WHERE LIMIT 1 is niet de juiste SQL. En je zou moeten leren om de juiste join te gebruiken syntaxis. Vermoedelijk bedoelt u:

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

Je zou eventueel LIKE . kunnen toevoegen in plaats van = en '%' in de subquery:

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

Maar ik zou dit schrijven met 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, '%')
             );

Dit doet niet precies hetzelfde als uw vraag. Het doet iets redelijks. In plaats van één willekeurige naam uit de subquery te vergelijken, zal het bepalen of er enige . zijn overeenkomsten in de subquery. Dat lijkt een meer redelijke bedoeling voor de zoekopdracht.



  1. vind opeenvolgende transactie binnen 10 minuten

  2. hoe een dynamisch menu met submenu te maken met php &mysql

  3. Hoe krijg ik de eerste en laatste datum van het lopende jaar?

  4. Regex capture-groepen simuleren in mysql