0

vendorID がベンダー テーブルの一意のキーである vendorID に基づいて、すべてのテーブルから共通のデータを表示する方法。そして、これを他のすべてのテーブル(コストテーブル、時間テーブル、従業員テーブル、一時テーブル、および)の外部キーとして使用します。

これは私のコスト テーブル構造です 料金 これは私の時間テーブル構造 時間 です これは私の 一時テーブル構造 ですここに画像の説明を入力 これは私の従業員テーブルです 従業員テーブル

これは私のファイナルテーブル ベンダーです。vendorID は一意のキーです ここに画像の説明を入力

そして、次のクエリを使用しましたが、別のデータが表示されています。

SELECT * FROM cw_employee_csv as emp 
inner join cw_cost_hour as cost on cost.vendorid=emp.vendorid 
inner join cw_temp_employee as temp on cost.vendorid=temp.vendorid 
inner join cw_hour_company as hour on temp.vendorid=hour.vendorid 
inner join cw_vendor as vendor on temp.vendorid=vendor.vendorid 
where vendor.companyid=1 ORDER BY hour.timeFrom ASC
4

1 に答える 1

0

わかったら、これを試してください:

フィールドリストのクエリで、表示する明示的なフィールドを次に示します。

SELECT 
    emp.assignmentid, cost.bill_type 
FROM 
    cw_employee_csv AS emp 
INNER JOIN 
    cw_cost_hour AS cost ON cost.vendorid = emp.vendorid 
INNER JOIN 
    cw_temp_employee AS temp ON cost.vendorid = temp.vendorid 
INNER JOIN 
    cw_hour_company AS hour ON temp.vendorid = hour.vendorid 
INNER JOIN 
    cw_vendor AS vendor ON temp.vendorid = vendor.vendorid 
WHERE
    vendor.companyid = 1 
ORDER BY 
    hour.timeFrom ASC

テーブルのカーディナリティが異なり、ベンダーごとに 1 つの行のみを表示する場合は、cw_vendor を使用してメイン クエリを作成し、サブクエリを使用して他のテーブルから追加情報を取得する必要があります。明らかに、ベンダー テーブルの親テーブルについては、サブクエリを使用せずに INNER JOIN 情報を使用できます。

コメント後に編集:

このクエリから始めます (チャットでのディスカッションの後):

会社ごとに集計を抽出します(ベンダーごとにコストを要約すると思います。別の式を適用したい場合は、同じアルゴリズムです)

select 
    sum(t.vendor_cost), t.companyid
from 
    (select 
         vendor.companyid as companyid, vendor.id as vendorid,
         (select SUM(c.cost)
          from cw_cost_hoyr c
          where c.vendorid = vendor.id) as vendor_cost
     from 
         cw_vendor vendor) as t
group by 
    t.companyid

ここで他の情報を追加しますが、あなたが彼らの関係で正確に何を望んでいるかを理解する必要があります

于 2013-08-23T13:09:20.007 に答える