3

代理店を含むケースのリストがあります。すべてのエージェンシーには、ステータスが割り当てられたタスクが含まれています。0 = 完了、1 = 進行中、2 = 期限切れ。

期限切れのタスクがある場合は、すべてのケースで表示しようとしています。現時点では、期限切れのタスクがいくつかあるにもかかわらず、クエリのステータスが 1 と表示されています。

SQL フィドルはこちらhttp://sqlfiddle.com/#!2/a4394/3

正しいデータを引き出すために何を変更する必要があるのか​​ わかりません。何か案は?

どんな助けでも大歓迎です!!

4

3 に答える 3

1

MySQL のみを作成していることを無視するとSELECT、結合が間違っています。実際に参加したいときに参加cc.case_IDしています:caa.IDcaa.case_ID

SELECT cc . * , a.ID, MAX(cta.status) AS current_status
FROM cases_complete cc, agencies a, cases_agency_association caa,
  cases_task_association cta
WHERE cc.case_ID = caa.case_ID
AND caa.agency_ID = a.ID
AND cta.agency_association_ID = caa.ID
GROUP BY cc.case_ID

ただし、@meewoK のアプローチと、悪用しないというコメントGROUP BYは、どちらも、より明確で、より保守しやすく、できればより移植性が高く、将来的にも互換性があるものを考え出すという観点から考える価値があります。

于 2013-04-26T13:30:10.627 に答える
1

クエリは正しいです。問題は、複数のテーブルから情報を取得していることですが、すべてのテーブルに十分なレコードがないことです。基本的に、cases_agency_associationテーブルには最大 6 つの ID があり、テーブルのレコードcases_task_associationstatusは 2 で、すべての ID が 6 より大きい...

于 2013-04-26T13:29:52.663 に答える
0

これはあなたの基本的な問題を解決しませんか:

select * from `cases_task_association` where status =2;

これには結合などはありませんが、上記のクエリは、期限が過ぎていて完了していないすべてのケースを提供するためのベースです。

于 2013-04-26T13:27:28.163 に答える