2016-11-22 10 views
0

私はMySQLのnewbyです。何らかの理由でこの解決策がわかりません。 I 2つのテーブルがあります:私は参加するにはいくつかの味を試してみましたが、サブクエリを試してみたMySQL 2番目のテーブルの値を検索するクエリ

|---------------------------------------------------------------| 
| user_id | first_name | last_name | email      | 
|----------------------------------|----------------------------| 
| 1  | john  | doe  | [email protected]  | 
| 2  | joe  | schmoe | [email protected] | 
| 3  | harry  | pickle | [email protected] | 
|----------------------------------|----------------------------| 

が、私は「いくつかの簡単な方法がなければならない:

users 
|--------------------------------------------------| 
| user_id | user_name | email      | 
|--------------------------------------------------| 
| 1  | user1  | [email protected]  | 
| 2  | user2  | [email protected] | 
| 3  | user3  | [email protected] | 
|--------------------------------------------------| 

user_meta 
|---------------------------------| 
| user_id | meta_key | meta_value | 
|---------------------------------| 
| 1  | first_name | john  | 
| 1  | last_name | doe  | 
| 2  | first_name | joe  | 
| 2  | last_name | schmoe | 
| 3  | first_name | harry | 
| 3  | last_name | pickle | 
|---------------------------------| 

を、私はこの出力を生成し、単一のクエリをしたいです私は行方不明です。私は名字や名字を得ることはできますが、両方を出力することはできません。どんな助けもありがとう。

おかげ

+1

参考になる本を試してみてください、あなたがしようとしているものを私たちを見ることができますか? – driconmax

+0

データセットの観点から結合がどのように機能するかを理解することが役に立ちます。ここでは、これらのテーブルを結合して所望の結果を達成する方法を示す[良い記事](https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/)があります。注:ここで重要な点は、user_metaにユーザーから2回参加する必要があることです(別名両方の結合)。 'first_name'と 'last_name'についてもう一度3つのデータセットがあると考えてください。 user_IDのある電子メールアドレス、user_IDのあるfirst_nameデータセット、user_IDのlast_nameデータセット。あなたが試したことを示して、私たちは助けることができます! – xQbert

答えて

0

私は左の外側を使用FIRST_NAMEまたはlast_nameの鍵が与えられたのuser_idのために存在するという保証がないため、ここで合流します。そのような場合は、引き続きuser_idと電子メールが表示されますが、その名前にはNULLが設定されています。

SELECT U1.user_id, M1.first_name, M2.last_name, U1.email 
FROM users U1 
LEFT OUTER JOIN user_meta M1 ON M1.user_id = U1.user_id AND M1.meta_key = 'first_name' 
LEFT OUTER JOIN user_meta M2 ON M2.user_id = U1.user_id AND M2.meta_key = 'last_name' 
+0

それは私を投げたのはダブルジョイントでした。私はあなたが2つの別個のテーブルとしてメタテーブルを扱わなければならないということを知りませんでした。ありがとう! – user7195201

0

それは

select 
    u.user_id, 
    meta_value as first_name, 
    meta_value as last_name, 
    email 
from users u left outer join user_meta um on u.user_id = um.user_id 
group by u.user_id 
関連する問題