0

MySql に 2 つのテーブルがあるとします。

value (住所フィールドの値)

フィールド (住所フィールド)

一部の人 (値テーブルの user_id) がすべての addressFields に入力していない可能性があります。つまり、一部のフィールドの値しかありません。

まだ使用していない他のすべてのフィールドですべての値を取得するために、左結合と右結合のユニオンを実行しています (MYSQL には FULL OUTER JOIN がないため、ユニオンが使用されます)。

SELECT field.*, value.*
FROM field
LEFT JOIN value ON field.id = value.field_id 
WHERE 
value.user_id='4'

union

SELECT field.*, value.*
FROM field  
RIGHT OUTER JOIN value ON field.id = value.field_id
WHERE 
value.user_id='4'

上記の組合は、私が達成したいことをしていません。User=4 には、50 個のフィールドのうち 4 個しか入力されていません。クエリの結果は 4 のみを返します。2 番目のフィールドを置き換えると、

value.user_id='4' 

とともに

GROUP BY field.id 

次に、54行を返します(4行に加えて、他のユーザーからの値を持つ50の可能なフィールドすべて)。また、value.* にダミー値を使用しようとしましたが、ユニオンがレコードを正しくマージしていないため、再び 54 行が返されます。

私が必要とするものを達成する方法はありますか?アイデアをありがとう…。

4

1 に答える 1

1

私は簡単LEFT JOINにうまくいくと思います:

SELECT fields.*, value.*
  FROM field

  LEFT JOIN value
    ON field.id = value.field_id
   AND value.user_id = 4

user_id=4このユーザーのすべてのフィールドが入力されていないため、最終結果をフィルタリングすると問題が発生します。したがって、最終結果では、適切に入力されていないすべてのフィールドがnulluser_idに含まれ、条件によって削除されwhereます。

于 2015-08-02T11:33:45.900 に答える