3つのテーブル内に適格フィールド(bool)があります。テーブルは上司、マネージャー、労働者です。階層はBoss - Managers - workersになります。ワーカーはマネージャーを持たないかもしれないし、マネージャーはボスを持たないかもしれない。彼らはすべてこの適格なフィールドを持っています。私は上司が適格なフィールドをtrueに設定しています。マネージャーとマネージャーのすべての従業員はこのプロパティも継承します。ヌルストアドプロシージャではない階層内の最上位テーブルからIDを選択する方法
私は仕事のIDが常に労働者に割り当てられていると言います。最初に、彼がマネージャーと上司を持っているかどうかを調べ、階層内の最高から資格のあるフィールドを取得した後で調べる必要があります。
従業員にマネージャーがいて、マネージャーに上司がいれば、上司の適格フィールドを取得する必要があります。従業員にマネージャーがいるが、マネージャーに割り当てられているボスがない場合は、マネージャーの適格フィールドを取得する必要があります。従業員にマネージャーがいない場合(つまり、自分に割り当てられた上司を雇うことができないという意味)、従業員の資格を取得する必要があります。
私はこれに固執しています。私はSELECT CAST(CASE WHEN B.Id is not null) THEN RETURN..
と他のいくつかのバリエーションを試しましたが、運はまだありません。どんな助け?
SELECT W.Id, M.Id, B.Id
-- CAST(case when ED.Id is not null) THEN return M.Eligible
from Job J
Inner Join Worker W on W.Job_Id = J.Id
Left Join Manager M on M.Id= W.ManagerID
Left Join Boss B on B.Id = M.BossId
Where J.Id = 1 and B.Id is not null and M.Id is not null
は、これまでのところ私はIDのみを取得することができますが、最高ランクの労働者の
例のデータを単に資格Boolean
フィールドを返す方法がわからない -
ジョブズ表
- --------
IDが1、ワーカー1、
は、ID 2、ワーカー2、
IDが3、ワーカー3、
労働表
-------------
IDが1、マネージャーID 1、適格偽
IDが2、マネージャーID 2、適格偽
IDが3、マネージャーIDヌル、真適格
マネージャ表
--------------
同上1、BossId 1、適格偽
同上2、BossIdヌル、適格真
ボス表
----------
IDが1、適格真
、それはあまりにも上司を持っている場合INNER JOIN
と、それが唯一の値を返しますので、私はLEFT JOIN
を使用する理由。それがtrueに設定されているボスTable
までのすべての道を行くので
ジョブ1が真だろう
それはマネージャーレベルまで上昇し、それが真
に設定されているため、ジョブ2が真のだろうそれは労働者のためにtrueに設定されているため仕事3は本当だろうし、それが何の上司やマネージャーを持っていないとして、それはその値に
EDITED SQL文を取るだろう
SELECT
CASE WHEN (B.Id IS NULL) then CASE WHEN (M.Id IS NULL) then W.Id else B.Id END
from Job J
Inner Join Worker W on W.Job_Id = J.Id
Left Join Manager M on M.Id= W.ManagerID
Left Join Boss B on B.Id = M.BossId
Where J.Id = 1 and B.Id is not null and M.Id is not null
明らかにSELECT
行が機能していません。この場合、どのようにCASE WHEN
を実行するか考えていますか?
MySQLまたはMS SQL Serverを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh
なぜLEFT JOINは、これらのテーブルに対してNOT NULL結果が必要なのでしょうか? – jarlh
サンプルテーブルのデータと期待される結果を追加してください。 – jarlh