0

Mysql に 2 つのテーブルがあり、1 つは請負業者を保持し、もう 1 つはプロジェクトを保持しています。プロジェクトの承認を示す請負業者プロジェクト レポートを作成したいと考えています。問題は、INNER JOIN、LEFT、および RIGHT OUTER JOINS であり、奇妙に思われる条件を省略しても、プロジェクトの請負業者のみを示す同じ結果がすべて生成されます。ここに私の声明があります

SELECT DISTINCT (tbl_contractor.name_v), count( tbl_project.name_v ) 
FROM tbl_contractor 
INNER JOIN tbl_project 
  ON tbl_project.Contractor=tbl_contractor.contractor_id_v 
  ON tbl_project.Contractor = tbl_contractor.contractor_id_v 
LIMIT 0 , 30;

SELECT DISTINCT (tbl_contractor.name_v), count( tbl_project.name_v ) 
FROM tbl_contractor
LEFT OUTER JOIN tbl_project 
ON tbl_project.Contractor = tbl_contractor.contractor_id_v 
LIMIT 0 , 30;
4

3 に答える 3

2

COUNT()のない集計関数 がありGROUP BYます。これは、クエリが 1 行のみを返すことを意味します。

おそらくGROUP BY(請負業者)が必要です:

SELECT tbl_contractor.name_v, COUNT( tbl_project.name_v ) 
FROM tbl_contractor
  LEFT OUTER JOIN tbl_project 
    ON tbl_project.Contractor = tbl_contractor.contractor_id_v 
GROUP BY tbl_contractor.contractor_id_v 
LIMIT 0 , 30;
于 2012-05-21T14:03:57.363 に答える
0

クエリを実行SELECT DISTINCT (tbl_contractor.name_v)すると、請負業者名ごとに 1 つの行のみが返されます。異なるものを削除して、より良い請負業者 - プロジェクトの結果が得られるかどうかを確認してください。

于 2012-05-21T13:42:05.710 に答える
0

これらのクエリは、実際には請負業者のクエリごとにグループ化されています。すべての請負業者が少なくとも 1 つのプロジェクトを持っている場合、内部結合と左外部結合は同じ結果を返します。プロジェクトのない請負業者が存在する場合、結果は LIMIT 句の影響を受けます。最初の 30 件しか取得できず、何らかの理由で、一致したものが最初に表示されます。

于 2012-05-21T13:57:08.917 に答える