2016-08-24 28 views
2

は、私は2つのテーブルを持っていると言うことができますおそらく、サブクエリと合流(中間):単純なクエリ

  • 「顧客の列 'のclient_id' と '名'

  • 'お店' を持つと列「ID」、「shop_name」と「アクティブ」(列挙Y/N)

私は私のクライアントの名前のすべてを与えるクエリを作成したい、+に設定されている彼らのshop_nameの最初のアクティブ( 'y')。非存在の場合は、nullとして渡しますが、すべてのクライアント名を持つ必要があります。

基本的に私はすべてのクライアントを選択して、アクティブなショップがあるかどうかを確認し、そうであれば最初のクライアントに割り当てます。

は、ここに私のクエリです:

SELECT c.name 
    , s.shop_name 
    FROM clients AS c 
    LEFT 
    JOIN shops AS s 
    ON s.id = c.client_id 
WHERE s.active='y' 

しかし、働いていない - それは唯一の他のものを忘れ、アクティブショップで私のクライアントを与えています。

任意のアイデアを、私は、サブクエリを考えているが、それは私には新鮮な話題だ...

+0

「first of their shop_name」はどういう意味ですか?クライアントはアクティブなショップを1つしか持てませんか? –

答えて

3

はあなたがあなたのON条件にごWHERE句を移動する必要があります。

Select  C.Name, 
      S.shop_name 
From  Clients As C 
Left Join Shops As S On S.id = C.client_id 
         And S.active = 'y' 

WHERE句でLEFT JOINの右側のテーブルを含めることで、あなたはINNER JOINOUTER JOINを変換しています。これは、WHEREフィルタがの後にLEFT JOINが完了したために実行されたため、結果として受け取ったNULLの結果が除外されるためです。