复杂的Mysql字符串不返回行

时间:2012-04-10 11:15:56

标签: mysql sql

我有3行"服务"表:

ID | name | ObrID
 0 |   A  |  1
 1 |   B  |  2
 2 |   C  |  -1

-1是一个不存在的Obr,服务2不包含任何Obr或它被删除。

如果我使用select * from Services获取,它会按预期工作,但如果我执行搜索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

3 个答案:

答案 0 :(得分:2)

您想使用左连接。

http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

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

答案 1 :(得分:0)

可能在下面可以帮助:

select s.*,ob.Name from Services as s left join Obrs as ob on s.ID=ob.ObrID where  ob.Name like '%$SEARCH_STRING%';

答案 2 :(得分:-1)

如果由于Obrs.NameObrID而没有-1,则Obrs.Name将为NULL,因此不会为LIKE '%$SEARCH_STRING%'。您可以添加其他条件以包括这些情况:

where 
    (select Name from Obrs where ID=ObrID) like '%$SEARCH_STRING%'
    OR ObrID = -1

按照Flöcsy的建议并使用LEFT JOIN。连接始终是首选方法,尤其是相对于相关子系统。使用LEFT JOIN时的工作条件是

WHERE 
    Obrs.Name LIKE '%$SEARCH_STRING%'
    OR Obrs.Name IS NULL