2011-08-31 19 views
3

なぜこのSQLクエリはusers_warningsに行しかない場合にのみ結果を表示しますか?クエリで結果が返されないのはなぜですか?

SELECT 
u.id, 
uw.warning 
FROM 
users u 
INNER JOIN users_warnings uw ON (
    u.id = uw.uID 
) 
LIMIT 21 

私はすべてのユーザーを表示したいと思いますが、users_warningsに「warning」という列も表示します。

答えて

6

INNER JOINだけで何かを返します。ように、左結合のためのインナー参加ご

SELECT u.id, uw.warning FROM users u 
      LEFT JOIN users_warnings uw ON (u.id = uw.uID) 
      LIMIT 21 
+0

これは外部結合ではなく、 – kralco626

6

inner joinを使用しているため、結合された表に行が存在する必要があります。以下試してみてください。両方のテーブルにデータがある場合

SELECT 
u.id, 
uw.warning 
FROM 
users u 
LEFT JOIN users_warnings uw ON (
    u.id = uw.uID 
) 
LIMIT 21 
2

変更:

SELECT u.id, uw.warning FROM users u 
       LEFT JOIN users_warnings uw ON (u.id = uw.uID) 
       LIMIT 21 
1
SELECT 
    u.id, 
    IFNULL(uw.warning,'') warning 
FROM 
    (SELECT id FROM users LIMIT 21) u 
    LEFT JOIN users_warnings uw 
    ON u.id = uw.uID 
; 
  • はINNERが
  • リファクタリング登録しようではないJOINをままにしておく必要があり
    LEFT JOIN代わりにしてみてくださいJOIN(高速クエリ)を試行する前に最初の21人のユーザーを取得するクエリ
  • ユーザーに警告がない場合の空白文字列に対するデフォルトの警告
関連する問題