2016-11-11 4 views
-1

同じホテルで一緒に旅行した名前のある全従業員のカップルを取得する必要があります。 私はグループ機能でそれを手に入れようとしましたが、最初のものだけが表示され、他のすべての従業員も表示されます。私はwhereステートメント(count(*)== 2)でソートしようとしましたが、count()とはうまく動作しませんでした。同じ日付の列を表示するSQL

select *, count(*) as Travelers from employees E 
    join travel t 
    on E.PNR = E.employees_Nr 
    join hotel H 
    on H.HNR = R.Hotel_HNR 
    group by beginndate; 

は、あなたが私を助けることを願って:) 感謝を!

+3

サンプルデータと希望する結果を表示してください。また、使用されているdbmsにタグを付けます。 –

+0

Im mysqlWorkbenchでMaria DBを使用しています 値を入力してください 値(2193、 'George'、10,2700); mitarbeiterに挿入 値(2194、 'Schlicht'、30,6000); ホテルへの挿入 値(6、 'Zum Stern'、 'Business'、37216、 'Witzenhausen'); 改訂値に挿入する(2194,6、 "2015-01-12"、 "2015-03-12"、2131); 改訂値に挿入する(2193,6、 "2015-01-12"、 "2015-01-13"、500); – Shaegi

+0

"一緒に旅行した"とはどういう意味ですか?私は 'last_name'を信頼しません。 –

答えて

0

あなたの例での命名は、特に一貫していないので、アイデアを伝えるためにテーブル/カラム名を模倣しています。自然にクエリを編集する必要があります。

また、すべてのテーブルからすべての列を選択する必要はないかもしれませんが、これは試行したクエリで行った処理なので、そのまま残しておきます。

select *, count(*) as Travelers 
from employees E1, employees E2, travel T1, travel T2, hotel H 
where E1.PNR = T1.employees_Nr 
    and E2.PNR = T2.employees_Nr 
    and E1.PNR != E2.PNR 
    and T1.begindate = T2.begindate 
    and T1.hotel_HNR = T2.hotel_HNR 
    and T1.hotel_HNR = H.HNR; 

問合せは、パフォーマンスの観点から、これまでの最高ではないかもしれないが、私はあなたが旅行の従業員と数十億数百万人があるとしていないので、それはすべての権利を行う必要があります。それでも、良いインデックスがあることを確認してください。もちろん、主キーはemployees_Nrhotel_HNRbegindateになるでしょう。

関連する問題