不返回行的复杂Mysql字符串
我在“服务”表中有3行: -1是不存在的Obr,服务2不包含任何Obr或已被删除 如果我使用不返回行的复杂Mysql字符串,mysql,sql,Mysql,Sql,我在“服务”表中有3行: -1是不存在的Obr,服务2不包含任何Obr或已被删除 如果我使用select*fromservices提取,它将按预期工作,但如果我执行搜索sql: select *, (select Name from Obrs where ID=ObrID) as ObrName from Services where (select Name from Obrs where ID=ObrID) like '%SEARCH_STRING%' 它
select*fromservices
提取,它将按预期工作,但如果我执行搜索sql:
select
*,
(select Name from Obrs where ID=ObrID) as ObrName
from
Services
where
(select Name from Obrs where ID=ObrID) like '%SEARCH_STRING%'
它不返回最后一行。有没有办法让它返回类似于:
ID | name | ObrID | ObrName
0 | A | 1 | ObrA
1 | B | 2 | ObrB
3 | C | -1 | NULL
如果因为您的
ObrID
是-1
而没有Obrs.Name
,则Obrs.Name
将是NULL
,因此不像“%$SEARCH\u STRING%”那样。您可以添加一个附加条件,以包括以下情况:
where
(select Name from Obrs where ID=ObrID) like '%$SEARCH_STRING%'
OR ObrID = -1
并遵循的建议,使用左连接
。连接始终是首选方法,尤其是与相关子查询相比。使用左连接时的工作条件为
WHERE
Obrs.Name LIKE '%$SEARCH_STRING%'
OR Obrs.Name IS NULL
您想使用左联接
或:
下面可能会有帮助:
select s.*,ob.Name from Services as s left join Obrs as ob on s.ID=ob.ObrID where ob.Name like '%$SEARCH_STRING%';
SELECT s.*,o.ObrName from Services s
LEFT JOIN Obrs o ON ID=ObrID
WHERE OrbName LIKE '%$SEARCH_STRING%' OR OrbName IS NULL
SELECT * FROM (select s.*,o.ObrName from Services s
LEFT JOIN Obrs o ON ID=ObrID) tmp
WHERE OrbName LIKE '%$SEARCH_STRING%' OR OrbName IS NULL
select s.*,ob.Name from Services as s left join Obrs as ob on s.ID=ob.ObrID where ob.Name like '%$SEARCH_STRING%';