Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie „LIKE” z wynikiem podzapytania SQL

Po pierwsze, to zapytanie powinno nie działa dobrze:

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

Ponieważ WHERE LIMIT 1 nie jest poprawnym SQL. I powinieneś nauczyć się używać prawidłowego join składnia. Przypuszczalnie zamierzasz:

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

Ewentualnie możesz dodać LIKE zamiast = i '%' w podzapytaniu:

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

Ale napisałbym to za 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, '%')
             );

To nie jest dokładnie to samo, co zapytanie. Robi coś bardziej rozsądnego. Zamiast porównywać jedną losową nazwę z podzapytania, określi, czy istnieją jakiekolwiek dopasowania w podzapytaniu. Wydaje się to bardziej rozsądną intencją dla zapytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jednoczesne ODCZYT i ZAPIS w tabeli MySQL

  2. MySQL XDevAPI Jak zwrócić pomyślny status

  3. MySQL – różne metody poznania aktualnego użytkownika

  4. Wędrujące przekierowanie portów dla Mysql

  5. Przyznaj uprawnienia do kilku tabel z określonym prefiksem