1

だから私はdbのqueryために以下を持っていますmysql

SELECT CFM.display_name, CFM.field_type, CFM.option_value
FROM company_mast
LEFT JOIN component_mast ON company_mast.id = component_mast.company_id
LEFT JOIN CustomField_mast CFM ON CFM.Company_ID = Component_mast.Company_ID
AND CFM.Component_ID = component_Mast.Component_ID
WHERE component_mast.component_name =  'Assets'
AND component_mast.project_id =  '1'

そして、それは私が望むものを正確に返します。このようにクエリすることもできます

SELECT CFM.display_name, CFM.field_type, CFM.option_value
FROM company_mast
LEFT JOIN component_mast ON company_mast.id = component_mast.company_id
LEFT JOIN CustomField_mast CFM ON CFM.Company_ID = Component_mast.Company_ID
AND CFM.Component_ID = component_Mast.Component_ID
WHERE component_mast.component_name =  'Assets'
AND company_mast.company_name =  'Company' <!-- this line is different -->

繰り返しますが、私が望むものを正確に返します。それでも、このクエリを実行すると

SELECT CFM.display_name, CFM.field_type, CFM.option_value
FROM company_mast
LEFT JOIN component_mast ON company_mast.id = component_mast.company_id
LEFT JOIN CustomField_mast CFM ON CFM.Company_ID = Component_mast.Company_ID
AND CFM.Component_ID = component_Mast.Component_ID
WHERE component_mast.component_name =  'Assets'
AND component_mast.project_id =  '1'
AND company_mast.company_name =  'Company'

0 の結果が得られます。現在のところ、これは機能していますが、このデータベースが大きくなると、同じ会社に同じ名前のコンポーネントが複数存在するようになります。そのため、一意の識別子である project_id を追加する必要があります。

3 番目のクエリが最初の 2 つのクエリを返さないのはなぜですか? どうすれば修正できますか?

4

1 に答える 1

3

or条件の代わりに条件が必要な場合がありandます。

SELECT CFM.display_name, CFM.field_type, CFM.option_value
FROM company_mast
LEFT JOIN component_mast ON company_mast.id = component_mast.company_id
LEFT JOIN CustomField_mast CFM ON CFM.Company_ID = Component_mast.Company_ID
AND CFM.Component_ID = component_Mast.Component_ID
WHERE component_mast.component_name =  'Assets'
AND (component_mast.project_id =  '1' or company_mast.company_name =  'Company')
于 2013-06-01T23:51:55.313 に答える