我在“服务”表上有 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
最佳答案
您想要使用左连接。
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
关于mysql - 复杂的 Mysql 字符串不返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087685/