对 SQL 子查询的结果使用“LIKE”

Shr*_* SG 5 mysql sql subquery sql-like

以下查询对我来说非常好:

SELECT * From Customers
WHERE Customers.ContactName = (SELECT FirstName
                               FROM Employees as E, orders as O
                               WHERE <condition>
                               LIMIT 1);
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用LIKE而不是=与子查询的结果进行比较,则不会得到任何结果。如何LIKE '%%'在上述查询中使用?

Gor*_*off 5

首先,这个查询应该不会是工作的罚款:

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

因为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
                      );
Run Code Online (Sandbox Code Playgroud)

您可以想象在子查询中添加LIKE而不是='%' :

WHERE c.ContactName LIKE (SELECT CONCAT('%', FirstName, '%') . . .
Run Code Online (Sandbox Code Playgroud)

但我会写这个使用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, '%')
             );
Run Code Online (Sandbox Code Playgroud)

这与您的查询不完全相同。它做了一些更合理的事情。它不是比较子查询中的一个随机名称,而是确定子查询中是否有任何匹配项。这似乎是查询的更合理意图。