2016-11-01 16 views
0

私がしたいことを説明するのは本当に難しいと思っています。SQLのwhere節が動作しない

私は2つのテーブルを持っている - ヘッダーとサインオフは

ヘッダーは次のようなものになります:ヘッダ

にIDに関連

ID | Badge | HeaderID | Recert | 
24 | 204 | 60  | 0  | 
25 | 201 | 60  | 1  | 
26 | 201 | 61  | 0  | 

HeaderIDサインオフで:

ID | Name | Description | Path  | Pnum | DateC | Prep | Assem | 
60 | OSI | OSI-180 | blah.pdf | abc123 | 1/11/16 | 0 | 1  | 
61 | test | test  | test.pdf | 12345 | 1/11/16 | 1 | 0  | 

サインオフ、このように

header.ID、header.Name、header.path、header.desを取得したいcription、header.datec、header.prep、header.assem、およびsignoff.Recertify。

header.IDは、複数の行があるので変化しますが、この例では2つあります。サインオフテーブルには、60(204,201)に関連する2つのバッジと、61(201)に関連する1つのバッジがあります。

ステートメントで60と61のすべての行を取り除きたいが、重複する行がないようにする(60と61の両方が1回だけ表示される)と、バッジが関連する行を使用する複数の。例えば、それが表示されるでしょう:

60, OSI, etc, etc, 1/11/16, 0, 1, 0 - relates to badge 204 
61, test, etc, etc, 1/11/16, 1, 0, 0 - relates to badge 201 

私がこれまで持っていることは次のとおりです。

SELECT header.ID, header.Name , header.path , header.description , header.datec , header.prep , header.assem , header.testing , header.finish , signoff.Recertify, 
from screens.header 
LEFT JOIN screens.signoff ON header.ID=signoff.HeaderID 
where header.ID = '60' and signoff.badge = '204' 

はこれで問題がある(60および204は、それを実行するコードに変更されます)サインオフ時にHeaderIDに対して204のエントリがない場合は表示されません。

私が本質的にしようとしているのは、テーブルに値を設定して、誰かがドキュメント(再作成時に1で示される)に対して再認証する必要がある場合、行の色を変更することです。変数のユーザーのバッジ番号があります。

私のデータを取得する方法を見つけることができないので、誰かがSQLのビットを助けることができます。あなたは「殺害」LEFT JOINとあなた以来、それだけでJOINを作っていることを意味し、左の

+0

バッジテストをjoin節に入れます。基本的には、join ... on id = headeridとbadge = 204'です。そうすれば、右側(サインオフ)側にレコードがなくても、あなたはまだ左(ヘッダー)にあるものを取得します。 –

+0

Recertのロジックは何ですか? Recert 0とRecert 1のID 60には2つのサインオフがあります。何が表示され、なぜ表示されるのですか? – Galz

答えて

0

条件は、WHERE句でサインオフに条件を置くON句

SELECT header.ID, header.Name , header.path , header.description , header.datec , header.prep , header.assem , header.testing , header.finish , signoff.Recertify, 
FROM screens.header 
LEFT JOIN screens.signoff 
    ON header.ID=signoff.HeaderID 
    AND signoff.badge = '204' 
WHERE header.ID = '60' 

にする必要があります登録しようMySQLにsignoff.badge = '204'という結果のみを表示するように指示しているので、サインオフに一致する結果が含まれています。