2015-06-25 2 views
0

У меня есть требование таким образом, что он должен соединить две таблицы с более 100к записей в одной таблице и только 5 записей в другой таблице, как показано нижеЗапрос 100k записи на 5 записей

Employee        Dept      Result 
     id Name deptid    deptid Name   Name  deptid Name 
     1 Jane  1      1  Science   Jane  1  Science 
     2 Jack  2      2  Maths   Dane  1  Science 
     3 Dane  1      3  Biology   Jack  2  Maths 
     4 Drack 3      4  Social   Drack  3  Biology 
     5 Drim       5  Zoology   Kery  4  Social 
     6 Drum  5           Drum  5  Zoology 
     7 Krack              
     8 Kery  4             
     . 
     . 
     100k 

Что присоединиться необходимо использовать, чтобы получить запрос более эффективным способом для получения результата, как показано. Я просто хочу, чтобы запрос соединялся с другой таблицей только из таблицы employee, у которой есть отдел, который я думал о нижнем запросе, но хотел знать, есть ли лучший способ сделать это.

Select e.name,d.deptid,d.Name from 
(Select deptid,Name from Employee where deptid IS NOT NULL) A 
and dept d where A.deptid=d.deptid; 
+0

ошибка синтаксиса в 'и dept ...' – wildplasser

+0

удалить и выполнить – ram

ответ

1

Во-первых, не уверен, почему вы выполняете свой запрос так, как вы. Должно быть больше похоже

SELECT A.name, D.deptid,D.Name 
FROM Employee A 
INNER JOIN dept D 
ON A.deptid = D.deptid 

Нет необходимости в заявлении IS NOT NULL.

Если это ОДНОРАЗ.РАССЫЛ или Журнальной вещь и производительность является ключевой (не постоянным запрос в вашей БД) вы можете выйти из объединения в целом и сделать это с помощью CASE:

SELECT 
    A.name, A.deptid, 
    CASE 
     WHEN A.deptid = 1 THEN "Science" 
     WHEN A.deptid = 2 THEN "Maths" 
     ...[etc for the other 3 departments]... 
    END as Name 
FROM Employee A 

Если это должно быть постоянным, а производительность - ключом, попробуйте применить ИНДЕКС по внешнему ключу deptid в таблице Employee и использовать мой первый запрос выше.

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