2017-08-17 22 views
0

同じ日に2つのテーブルを結合する方法:1(dummy_daily)私は次のようなデータを持つ2つのテーブル持って

TABLE

Entry    storenum    busidate    daily_budget 
1      1     2017-07-01    4000 
2      1     2017-07-02    3500 
3      1     2017-07-03    2000 
4      1     2017-07-04    6000 
5      1     2017-07-05    1500 

表2(site_labour)

Lab_id    storenum    busidate    lab_hour 
1123     1     2017-07-01    128 
1124     1     2017-07-02    103 
1125     1     2017-07-03    114 
1126     1     2017-07-04    108 
1127     1     2017-07-05    118 

これは、同じ日付の2つのテーブルを組み合わせて、の結果を与えるための現在のクエリです0とlab_hour QUERY:

Ideal   Actual    storenum     busidate 
4000   128     1      2017-07-01 
3500   128     1      2017-07-02 
2000   128     1      2017-07-03 
6000   128     1      2017-07-04 
1500   103     1      2017-07-05 
4000   103     1      2017-07-01 
3500   103     1      2017-07-02 
2000   103     1      2017-07-03 
6000   103     1      2017-07-04 
1500   103     1      2017-07-05 

このデータは実際の118の終わりまで続く現在のクエリの

間違った結果:

SELECT 
a.daily_budget as Ideal, c.lab_hour as Actual, 
b.store_name, b.storenum,a.busidate 
FROM dummy_daily a JOIN site_store b ON b.storenum=a.storenum JOIN 
site_labour c ON b.storenum=c.storenum 
WHERE b.storenum='1' AND 
(CASE WHEN c.busidate BETWEEN '2017-07-01' AND '2017-07-05' THEN c.lab_hour ELSE 0 END) 
AND (CASE WHEN a.busidate 
BETWEEN '2017-07-01' AND '2017-07-05' THEN a.daily_budget ELSE 0 END) 

しかし、私の現在のクエリは私に間違った結果を与えます

期待される結果

Ideal   Actual    storenum     busidate 
4000   128     1      2017-07-01 
3500   103     1      2017-07-02 
2000   114     1      2017-07-03 
6000   108     1      2017-07-04 
1500   118     1      2017-07-05 
+0

2つのテーブルを結合する際の論理についても説明できますか? –

+0

1つのクエリ内で 'daily_budget'と 'lab_hour'を取得するには、この2つのテーブルを結合する必要があります。 – NHH

+0

@NHH、あなたが望むものを理解できるようにサンプルデータを追加しましょう – hiule

答えて

0

そのメイクの混乱は、私の理解あたりとしてロジック、 を作成するので、あなたはもう一つのテーブルを見逃している、私は、SELECT文を作成しました。これを試してください: -

SELECT 
    dummy_daily.daily_budget as Ideal, site_labour.lab_hour as Actual, 
    site_store.store_name, site_store.storenum, dummy_daily.busidate 
    FROM dummy_daily 
    JOIN site_store 
    ON dummy_daily.storenum = site_store.storenum 
    JOIN site_labour 
    ON dummy_daily.storenum = site_labour.storenum 
    WHERE (dummy_daily.storenum = 1) 
    AND (dummy_daily.busidate BETWEEN '2017-07-01' AND '2017-07-05') 
    AND (site_labour.busidate BETWEEN '2017-07-01' AND '2017-07-05') 
    AND (dummy_daily.busidate = site_labour.busidate); 
0

のは、以下のSQLを試してみましょう:

SELECT 
a.daily_budget as Ideal, c.lab_hour as Actual, 
b.store_name, b.storenum,a.busidate 
FROM dummy_daily a JOIN site_store b ON b.storenum=a.storenum AND b.busidate=a.busidate JOIN 
site_labour c ON b.storenum=c.storenum AND b.busidate=c.busidate 
WHERE b.storenum='1' AND 
(CASE WHEN c.busidate BETWEEN '2017-07-01' AND '2017-07-05' THEN c.lab_hour ELSE 0 END) 
AND (CASE WHEN a.busidate 
BETWEEN '2017-07-01' AND '2017-07-05' THEN a.daily_budget ELSE 0 END) 
関連する問題