以下查询对我来说绝对正常:
SELECT * From Customers
WHERE Customers.ContactName = (SELECT FirstName
FROM Employees as E, orders as O
WHERE <condition>
LIMIT 1);
但是,如果我使用LIKE
而不是=
与子查询的结果进行比较,则不会得到任何结果。如何LIKE '%%'
在上述查询中使用?
首先,这个查询应该不会是工作的罚款:
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, '%')
);
这与查询的功能不完全相同。它做了一些更合理的事情。它会确定子查询中是否有任何匹配项,而不是比较子查询中的一个随机名称。对于查询来说,这似乎是一个更合理的意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句