0

「サービス」テーブルに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
4

3 に答える 3

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
于 2012-04-10T11:20:14.123 に答える
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%';
于 2012-04-10T11:27:17.550 に答える
-1

Obrs.NameあなたObrIDがであるためにない場合は-1Obrs.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
于 2012-04-10T11:19:46.337 に答える