Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на 'LIKE' с резултат от SQL подзаявка

Първо, тази заявка трябва не работи добре:

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

Тъй като WHERE LIMIT 1 не е правилен SQL. И трябва да се научите да използвате правилното join синтаксис. Предполага се, че възнамерявате:

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

Възможно е да добавите LIKE вместо = и '%' в подзаявката:

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

Но бих написал това с помощта на 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, '%')
             );

Това не прави точно същото като вашата заявка. Прави нещо по-разумно. Вместо да сравнява едно произволно име от подзаявката, то ще определи дали има някакво съвпадения в подзаявката. Това изглежда по-разумно намерение за заявката.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да моделирам приятелски отношения

  2. Споделяне на стойност user_id между две MySql таблици

  3. MySQL репликация:Грешни транзакции в GTID базирана репликация

  4. извадете 1 от числото в ред SQL заявка

  5. Множество клаузи ИЛИ в MySQL