つの提案:
1)の文(ドン」内ユニークエイリアステーブルを作る)古い学校のカンマが新しい
2キーワードJOIN構文で結合構文を混在させることはできません。 tは私たちは、2つのusermetaテーブルに参加する必要はないと思う)
um
エイリアスを再利用します。私は、このクエリによって返される結果セットのような結果セットを返そうと思っています:
SELECT u.id AS name
, m.nickname AS nickname
, m.first_name AS first_name
FROM users u
LEFT
JOIN (SELECT um.umeta_id
, MAX(CASE WHEN um.meta_key='nickname' THEN um.meta_value END) AS nickname
, MAX(CASE WHEN um.meta_key='first_name' THEN um.meta_value END) AS first_name
FROM usermeta um
GROUP
BY um.umeta_id
) m
ON m.umeta_id = u.id
ORDER BY u.id
これは単なる推測です。仕様やサンプルデータ、期待される結果がなければ、我々はただ推測しているだけです。
フォロー
参加する代わりに、我々は、SELECTリスト内の相関サブクエリを使用することができます。例えば:私たちはusermetaテーブルに定義された適切なインデックスを持っているよう
SELECT u.id AS name
, (SELECT umn.meta_value
FROM usermeta umn
WHERE umn.umeta_id = u.id
AND umn.meta_key='nickname'
ORDER BY umn.meta_value DESC
LIMIT 1
) AS nickname
, (SELECT umn.meta_value
FROM usermeta umn
WHERE umn.umeta_id = u.id
AND umn.meta_key='first_name'
ORDER BY umn.meta_value DESC
LIMIT 1
) AS first_name
FROM users u
ORDER BY u.id
外側のクエリによって返される行の合理的な数のために、我々は(umeta_id,meta_key)
の列をリードし、限り、合理的なパフォーマンスを得ることができます。理想的には、被覆指数はmeta_value
も含まれています。
これらのサブクエリはそれぞれの外部クエリによって返されるローごとに実行されるため、多くの行を返すとパフォーマンスが低下する可能性があります。
Dont mix、(古い結合構文)、JOIN構文 –