Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung von „LIKE“ mit dem Ergebnis einer SQL-Unterabfrage

Erstens, diese Abfrage sollte nicht gut funktionieren:

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

Denn WHERE LIMIT 1 ist kein richtiges SQL. Und Sie sollten lernen, den richtigen join zu verwenden Syntax. Vermutlich beabsichtigen Sie:

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

Sie könnten möglicherweise LIKE hinzufügen statt = und '%' in der Unterabfrage:

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

Aber ich würde dies mit EXISTS schreiben :

SELECT c.*
From Customers c
WHERE EXISTS (SELECT 1
              FROM Employees as E JOIN
                   Orders as O
                   ON . . .
              WHERE c.ContactName LIKE CONCAT('%', FirstName, '%')
             );

Dies macht nicht genau dasselbe wie Ihre Abfrage. Es macht etwas Vernünftigeres. Anstatt einen zufälligen Namen aus der Unterabfrage zu vergleichen, wird bestimmt, ob es irgendwelche gibt Übereinstimmungen in der Unterabfrage. Das scheint eine vernünftigere Absicht für die Abfrage zu sein.