Pertama, kueri ini harus tidak berfungsi dengan baik:
SELECT *
From Customers
WHERE Customers.ContactName = (SELECT FirstName
from Employees as E, orders as O
WHERE LIMIT 1);
Karena WHERE LIMIT 1
bukan SQL yang tepat. Dan, Anda harus belajar menggunakan join
yang tepat sintaksis. Agaknya, Anda bermaksud:
SELECT c.*
From Customers c
WHERE c.ContactName = (SELECT FirstName
FROM Employees as E JOIN
Orders as O
ON . . .
LIMIT 1
);
Anda dapat menambahkan LIKE
bukannya =
dan '%' di subkueri:
WHERE c.ContactName LIKE (SELECT CONCAT('%', FirstName, '%') . . .
Tapi saya akan menulis ini menggunakan 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, '%')
);
Ini tidak melakukan hal yang persis sama dengan kueri Anda. Itu melakukan sesuatu yang lebih masuk akal. Alih-alih membandingkan satu nama acak dari subkueri, itu akan menentukan apakah ada ada cocok di subquery. Tampaknya itu niat yang lebih masuk akal untuk kueri tersebut.