私は高速なクエリが必要です。私は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
よう
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')
;
目標を説明してみてください...適切なデータサンプルと期待される結果を表示してください。あなたは質問が私には分かりません。 – scaisEdge
私もあなたが探しているものは不明です。あなたは特定の「期間」内のすべての従業員のリストを必要としますか?ありませんで?他に何か? –
私は、期間内で期間がなく、単一のクエリでdbに存在しないempnoを持つすべての検索された従業員をリストするより良いアプローチを求めています。 実際に私は既にしました。どうしたの? ありがとうございました。 –