mysql - 复杂的 Mysql 字符串不返回行

标签 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

最佳答案

您想要使用左连接。

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/

相关文章:

php - Magento : How to override resource file?

database - ActiveRecord 可以在迁移之外创建表吗?

javascript - 如何使用JavaScript/Ajax和Python编辑本地SQL数据库?

mysql - 升级到 MySQL 8。从服务器收到字段 '255' 的未知字符集索引。异常(exception)

python - 使用不同于 utf8 的编码从 Python 写入数据库

MySQL - 按一列排序,然后按另一列排序

java - 无法从 base64 字符串中获取完整的图像质量

mysql - 在触发条件中插入 null 和字符串 'Null

mysql - 无法让 mysql_insert_id 工作,无法在任何地方找到答案

MySQL,显示行和列之间的具体值