2014-09-12 4 views
1

Пример:SQL присоединиться таблицы выбранных записей

SELECT SUM(SALARY) FROM (SELECT * FROM table1 WHERE id > 10) a LEFT JOIN table2 b on a.person = b.person 

Я хочу присоединиться к TABLE2 записи только (SELECT * FROM table1 WHERE id > 10) записей, мой пример не является правильным.

table1 содержат 100млн записи, и я не могу присоединиться к table2 для всех записей я должен использовать подзапрос

+0

какой стол является колонкой «зарплата»? –

+0

it's table1 column – Wizard

+0

@TomMac это обычный пример. У меня есть «зарплата» из таблицы2 и добавление условия для подсчета только некоторых типов aslary. – Wizard

ответ

1

Я предполагаю, вы зарплату не суммируете правильно (вы получаете больше, чем ожидаете). Это потому, что LEFT JOIN оставит NULL для строки, которая не имеет соответствия в b. Для этого SQL:

SELECT a.*, b.* 
FROM (select * from (SELECT 123 AS Salary, 
       'Tom' AS person 
     UNION 
     SELECT 343 AS Salary, 
       'Bob' AS person 
     UNION 
     SELECT 877 AS Salary, 
       'Tom' AS person) as t where t.Salary > 123) a 
     LEFT JOIN (SELECT * 
        FROM (SELECT 'Tom' AS person, 
           1  AS id 
          UNION 
          SELECT 'Bob' AS person, 
           2  AS id) AS t 
        WHERE t.id = 1) AS b 
       ON a.person = b.person 

вы будете иметь этот результат:

sql

Так INNER JOIN должны работать для вас.

SELECT SUM(SALARY) FROM (SELECT * FROM table1 WHERE id > 10) a 
LEFT JOIN table2 b on a.person = b.person 
1

Надеюсь, это поможет вам идти в правильном направлении ....

select sum(a.salary) 
from table1 a 
left join table2 b on a.person = b.person and b.salary_type = "something" 
where a.id > 10 
; 
Смежные вопросы