2017-02-21 5 views
-1

help Мне нужен быстрый запрос.Поиск с большого набора входных данных

вот мой случай:

У меня есть 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). 

Но из этого запроса это обыкновение возвращать любой сотрудник, который не в этот период. Предположим, что в этот период работает только работник 10 тыс., Другие 10 тыс. - это реальные данные, но работники, не находящиеся в p01, а остальные 10 тыс. - это не существующие данные, а ввод и поиск пользователей.

У меня есть другая идея, но на самом деле не совсем уверен в этом. Создаю временную таблицу, и она будет вставлять все emp_no в поиск пользователя. , а затем я присоединяюсь к ним, чтобы он сообщил, какой сотрудник существует в период и в рабочем столе таблицы, какой сотрудник не в тот период и какой emp_no недействителен.

somehting как

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

, который дает хороший результат, потому что только emp01 не нуль в поле PCODE

вы, ребята, есть какой-либо лучший подход без вставки данных в временные таблицы?

пс: я не знаю, почему 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

Я тоже не понимаю, что вы ищете. Вам нужен список всех сотрудников _in_ определенного «периода»? Не в? Что-то другое? –

+0

Я прошу лучшего подхода, чтобы перечислить всех искомых сотрудников, которые в период и чей не в период и который empno не существует в db только с одним запросом. фактически я уже сделал. и как я это сделал? спасибо. –

ответ

0

Для начала, каждая таблица должна иметь PRIMARY KEY. Возможноemployee должно иметь PRIMARY KEY(emp_no) и period должно иметь PRIMARY KEY(pcode).

После этого, пожалуйста, опишите, на словах, что вы пытаетесь достичь.

Смежные вопросы