2016-04-19 15 views
1

からすべて収集し、私は二つのテーブルがあります。SQLジョイン - RIGHTテーブル

user-data

id | userID | keyID | val 
1 99  1  1 

user-data-keys

id | key   
1 is-staff 
2 description 
3 image 

私は、次のSQLを実行したときに、私は希望を取得し出力:

SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id`; 

生成するもの:

key   | val 
is-staff  1 
description NULL 
image   NULL 

これはまさに私が望むものです。しかし、私はSQLにWHERE句を追加する場合:

SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` WHERE `userID` = 99; 

を、私はそれだけでis-staffで1行を取得します。私が理解しているのは、userID = 99の行だけを要求したからです。しかし、私は多くの異なるユーザーの情報を1つのuser-dataテーブルに格納することを計画しており、それぞれのキーにNULL値があるかどうかを知りたいと思っています。だから私はこれをどのように達成できますか?私はそれが私が気付いていないいくつかの種類のファンシーな結合でなければならないことを知っている。 WHERE userID = 99を使用している場合

key   | val 
is-staff  1 
description NULL 
image   NULL 

だから、明確にする:私はこのような出力を必要としています。現在、WHERE節を使用している間に1行しか取得できません。

+0

を使用すると、[この](HTTPのようなものを探しています....私を修正してください。 com/sql/sql_isnull.as p)?? – SamGhatak

+0

@SamGhatakは、 'user-data'に対応する' userID'行がなくても 'keys'フィールドを表示したいからです。 – Chud37

+0

だから、これらの行を選択した後でも、これらの行がすべて表示されますか? – SamGhatak

答えて

4
参加にWHERE句から述語を移動し

:。。あなたが一致しない行を取得したい場合との条件がuser-data ON」のように参加どこ

SELECT `key`,`val` FROM `user-data` RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` and `userID` = 99; 
+0

それは働いた!私はあなたが 'JOIN'に条件文を追加できるかどうかはわかりませんでした。ありがとう!! – Chud37

+0

うわー、その部分を完全に逃した...良いキャッチマン.. @ケーンアームストロング – SamGhatak

0

を、あなたが追加することができます= user-data-keyskeyIDid //www.w3schools:userID = 99 WHERE userID = 99」 "の代わりに" 私はそれが間違って取得していた場合には、

SELECT `key`,`val` 
FROM `user-data` 
RIGHT JOIN `user-data-keys` ON `user-data`.`keyID` = `user-data-keys`.`id` AND `userID` = 99 
WHERE 1; 
関連する問題