2017-03-28 10 views
2

私は小さな共役/ラジカル化アプリケーションを構築していますが、問題が発生しました。私は、このSQL要求があります。左結合を使用しているSQLが期待しているすべての行を返さない

SELECT DISTINCT RA.* 
FROM  radical RA 
left join conjugated CO 
on  CO.word_id = RA.id 
where  CO.conjugation IN ('I', 'am', 'a', 'cat') 

返します

| id | radical | 
| 13 | to be | 

をしかし、私はタイプの結果を取得したいと思います:

| id | radical | word | 
| null | null | I | 
| 13 | to be | am | 
| null | null | a | 
| null | null | cat | 

誰でも方法を知っていますか?あなたは、単に行うことができ、これらの値はconjugationにある場合

select w.word, ra.* 
from (select 'I' as word union all 
     select 'am' union all select 'a' union all select 'cat' 
    ) w left join 
    conjugated co 
    on co.conjugation = w.word left join 
    radical ra 
    on ra.id = co.word_id; 

+0

投稿してくださいサンプルデータ –

答えて

0

あなたが実際に(あなたが右の表のすべての行が返される述語を一致たい現れるので)Right

に参加する必要がある場合、一見そんなにどちらかに参加切り替え、参加Leftを使用している:

SELECT DISTINCT RA.*, co.`conjugated` as word 
FROM  radical RA 
right join conjugated CO 
on  CO.word_id = RA.id 
where  CO.conjugation IN ('I', 'am', 'a', 'cat'); 

またはFROMでのテーブルの順序を切り替える:

​​
+1

あなた、私の日を救った –

1

あなたはしかし、あなたが残しておきたいすべての単語を開始するために、left join必要

ある
select c.onjugation, ra.* 
from conjugated co left join 
    radical ra 
    on ra.id = co.word_id 
where c.conjugation in ('I', 'am', 'a', 'cat') ; 

、そのテーブル内のすべての一致する行を保持する必要があるため、conjugationを先頭にする必要があります。

関連する問題