2017-02-21 7 views
-1

私は高速なクエリが必要です。私は2つのテーブル、従業員と期間を有する入力の大きなセットから検索

は、ここに私の場合です。

表の従業員にemp_no、emp_nameが含まれているとします。 テーブル期間にperiod_code、emp_noが含まれています。

は、ユーザーが30kのデータを入力してすべて検索するまでは正常に見えます。

私の最初のアイデアは、この

SELECT p.* from periods p 
INNER JOIN employees e ON p.emp_no = e.emp_no 
WHERE p.period_code = 'p01' and (e.emp_no IN (first 5k emp_no) or e.emp_no IN (another 5k emp_no), etc). 

のようなものですが、そのクエリから、それは、その期間中にそれはないすべての従業員を返す文句を言いません。 その期間に10K人の従業員しかいないとしましょう。もう1つの10kは実際のデータですが、p01にはない従業員は10kです。データは存在しませんが、ユーザー入力して検索します。

私は別のアイデアを持っていますが、それについては本当にわかりません。 私はテンポラリテーブルを作成し、そのユーザー検索でemp_noをすべて挿入します。 それから、どの従業員がどの従業員がピリオドとテーブル従業員で、どの従業員がその期間になく、どのemp_noが有効でないのかを知るように私はそれらに参加します。唯一の君たちが一時テーブルにデータを挿入することなく、任意のより良い方法を持っている

Pコードフィールドにnullでないemp01ので結果は、良いです

SELECT t.emp_no,ee.emp_name,p.pcode from employee e 
JOIN period p ON p.emp_no = e.emp_no 
RIGHT JOIN temp_t t ON t.emp_no = p.emp_no 
LEFT JOIN employee ee ON ee.emp_no = t.emp_no 

result

よう

somehting?

PS:私はsqlfiddleが動作しない理由を知らない、ここではいくつかのテスト手始めに

CREATE TABLE employee 
    (`emp_no` VARCHAR(7), `emp_name` varchar(7)) 
; 
CREATE TABLE period 
    (`pcode` VARCHAR(7), `emp_name` varchar(7)) 
; 
CREATE TABLE temp_t 
    (`emp_no` VARCHAR(7)) 
; 

INSERT INTO employee 
    (`emp_no`, `emp_name`) 
VALUES 
    ('emp01', 'name1'), 
    ('emp02', 'name2') 
; 

INSERT INTO period 
    (`pcode`, `emp_no`) 
VALUES 
    ('p01', 'emp01') 
; 

INSERT INTO temp_t 
    (`emp_no`) 
VALUES 
    ('emp01'), 
    ('emp02'), 
    ('emp03') 
; 
+0

目標を説明してみてください...適切なデータサンプルと期待される結果を表示してください。あなたは質問が私には分かりません。 – scaisEdge

+0

私もあなたが探しているものは不明です。あなたは特定の「期間」内のすべての従業員のリストを必要としますか?ありませんで?他に何か? –

+0

私は、期間内で期間がなく、単一のクエリでdbに存在しないempnoを持つすべての検索された従業員をリストするより良いアプローチを求めています。 実際に私は既にしました。どうしたの? ありがとうございました。 –

答えて

0

ため、すべてのテーブルはPRIMARY KEYを持っている必要があります。 おそらくemployeeはとなり、periodPRIMARY KEY(pcode)となるはずです。

その後、達成しようとしていることを言葉で説明してください。

関連する問題