2016-10-14 8 views
1

あるテーブルから取得したユーザー名と別のテーブルからプロセスを取得し、1つのテーブルでそれらを結合しようとしています。しかし、すべての名前がプロセスを持っているわけではないので、私はNULLを印刷するか、プロセスの列に空白を入れてください。私が欲しいのは、各ユーザ名のすべてのユーザー名と割り当てられたプロセスを表示することで、すべての変数をNULLで出力する

SELECT projectNo, 
    proc_leader, 
    group_concat(process) AS processes 
FROM proc_leader 
INNER JOIN user ON user.username = proc_leader.proc_leader 
GROUP BY proc_leader, 
    projectNo; 

EDIT

OK:ここ

は、私が使用していsqlです。例えば、このような何か:

username|  processes | projectNo | 
--------+------------------+-----------+ 
barikan | ANM BLD, BGD CUP | 16001  | 
beny | BGD    | 16003  | 
aaron | NULL    | NULL  | 
alon | NULL    | NULL  | 
candy | BLD FCP   | 16003  | 
私は、SQLを使用した後に得たもの

SELECT projectNo, 
proc_leader, 
group_concat(process) AS processes 
FROM user 
LEFT JOIN proc_leader ON user.username = proc_leader.proc_leader 
GROUP BY proc_leader, projectNo; 

this

であるそれは私のプロセスと名前だけを与えるが、すべてのnmaesを取得する方法?おかげ

+2

「OUTER JOIN」はあなたが望むものです。 – Filburt

答えて

2

YOUR編集した後

あなたはuser.usernameを印刷して、列をproc_leaderないする必要があります!すべてのユーザーを取得しているため、たとえproc_leaderが関連付けられていなくても、proc_leaderを印刷すると、すべてのユーザーが表示されることはありません。

SELECT projectNo, username, group_concat(process) AS processes 
FROM user 
LEFT JOIN proc_leader ON user.username = proc_leader.proc_leader 
GROUP BY username, projectNo; 

はEDIT

前に私が本当にあなたの必要性を理解していますが、INNERはuser.usernameにJOINを行うときに、あなただけのproc_leaderに対応しているユーザー名を取得することを覚えていません。

[表1]からNULLユーザー名または空のIDを表示する場合は、LEFT JOINを代わりに実行する必要があります。

詳しい情報(別名LEFT OUTER JOINを):Left Join Chart をそれもB.

+0

編集を参照してください、 –

+1

それは私がそれを好きに見たいと思う方法の例です、そして、以下はLEFT JOINを使うときに実際に得たものです –

+0

ええ、申し訳ありません。私は私のコマンドを編集した、あなたは最初にproc_leaderではなく、ユーザー名を選択する必要があります – Aks

1

に出現することなく、あなたは単に私が期待しLEFTその場合

SELECT projectNo, 
    proc_leader, 
    group_concat(process) AS processes 
FROM user 
LEFT JOIN proc_leader ON user.username = proc_leader.proc_leader 
GROUP BY proc_leader, projectNo; 

ためにJOINを使用することができ、Aからすべての行を取りましたproc_leaderにプロセスカラムが存在していない場合は、テーブル名をスワップします。

+0

プロセスで名前だけを取得しています。編集を表示できます。 –

+0

@Yevgeniy blank row doesnたとえproc_leaderも空白であっても、その子テーブルからレコードをフェッチするため、何らかの意味があります。 – Susang

+0

私はproc_leaderをusernameに変更しました。ありがとう –

2

INNER JOINではなくLEFT JOINを使用できます。 このようにして、すべてのユーザーが返され、プロセスに関連付けられていないユーザーごとに、プロセス列にNULL値が渡されます。

SELECT projectNo, 
proc_leader, 
group_concat(process) AS processes 
FROM user 
LEFT JOIN proc_leader ON user.username = proc_leader.proc_leader 
GROUP BY proc_leader, projectNo; 

また、「FROM」テーブルはusersテーブルでなければなりません。これはすべての値を返すテーブルです。

+0

それは最初の行にNULLをちょうど私に捧げて、次にprocesesの名前だけを編集してください。 –

+0

重複した回答は元のものよりも多くの相互作用にありますか、可能であれば明確な回答を得てくださいdupからの良いスコア;) – Susang

関連する問題