1

次のクエリを使用して mysql データベースから情報を抽出しています。min( qt.quote_price ) の正しい値を取得しますが、st.Supplier_id の値が正しくありません。

where 句を満たすテーブルから最初の st.Supplier_id を返すようですが、明らかに min( qt.quote_price ) を持つ行の st.Supplier_id を返したいと思います。

これは簡単だと確信していますが、何らかの理由でそれを理解できず、誰かが私を正しい方向に向けることができれば幸いです.

SELECT ft.fuel_type_id, ft.fuel_name, st.Supplier_id, st.company_name as company_name, st.email, qt.supplier_id, qt.timestamp, qt.fuel_type_id, min( qt.quote_price ) AS best_derv
FROM tbl_quote qt
INNER JOIN `tbl_suppliers` st ON qt.supplier_id = st.Supplier_id
INNER JOIN `tbl_fuel-type` ft ON qt.fuel_type_id = ft.fuel_type_id
WHERE qt.fuel_type_id =3 AND qt.timestamp > date_sub( NOW(), INTERVAL 7 DAY )

クエリを機能するものに編集しましたが、それを改善するための助けをいただければ幸いです(可能であれば)。

SELECT qt.quote_id, ft.fuel_type_id, ft.fuel_name, st.Supplier_id, st.company_name as company_name, st.email, qt.supplier_id, qt.timestamp, qt.fuel_type_id, min( qt.quote_price ) AS best_derv
FROM tbl_quote qt
INNER JOIN `tbl_suppliers` st ON qt.supplier_id = st.Supplier_id
INNER JOIN `tbl_fuel-type` ft ON qt.fuel_type_id = ft.fuel_type_id
WHERE qt.quote_price = (Select min(quote_price) from tbl_quote where fuel_type_id =3 AND timestamp > date_sub( NOW(), INTERVAL 7 DAY ))
4

1 に答える 1

0

GROUP BYすべての非集計列をリストする句を追加する必要があります。

SELECT ft.fuel_type_id, ft.fuel_name, st.Supplier_id, st.company_name as company_name, st.email, qt.supplier_id, qt.timestamp, qt.fuel_type_id, min( qt.quote_price ) AS best_derv
FROM tbl_quote qt
INNER JOIN `tbl_suppliers` st ON qt.supplier_id = st.Supplier_id
INNER JOIN `tbl_fuel-type` ft ON qt.fuel_type_id = ft.fuel_type_id
WHERE qt.fuel_type_id =3
AND qt.timestamp > date_sub( NOW(), INTERVAL 7 DAY )
GROUP BY ft.fuel_type_id, ft.fuel_name, st.Supplier_id, st.company_name, st.email, qt.supplier_id, qt.timestamp, qt.fuel_type_id

他のすべての (mysql 以外の) データベースでは、問題を説明するエラー メッセージが表示されますが、mysql ではこの状況が許容されます。この場合、集約された行ではなく最初の行が返されます。

于 2013-10-05T20:14:41.153 に答える