2017-02-17 43 views
2

我正在使用MySQL,我是一个新手! 希望你们在这里可以帮我解决一个SQL问题。如何加入并给出一个默认值,如果一个值在一个表中,但不是另一个?

说我有2个表,我想要一个简单的连接。

表1:

id | service_id | user_number 
    ---------------------------------------------------------------------- 
    0 | 1001  | 10 
    1 | 1002  | 20 
    2 | 1004  | 40 

表2:

id | service_id | error_number 
    ---------------------------------------------------------------------- 
    0 | 1001  | 1000 
    1 | 1003  | 3000 
    2 | 1004  | 4000 

我想要做service_id联接,并有user_numbererror_number默认值是0,如果它不存在。 所以:

id | service_id | user_number | error_number 
    ---------------------------------------------------------------------- 
    0 | 1001  | 10   | 1000 
    1 | 1002  | 20   | 0 
    3 | 1003  | 0   | 3000 
    2 | 1004  | 40   | 4000 

我尝试了一些疑问,但他们不停地给我null而不是0 非常感谢。

+1

让我们了解您尝试:) – BobC

回答

0

这里你应该用union第一,然后做汇总:

select t.`service_id`, sum(t.`user_number`) as `user_number`, sum(t.`error_number`) as `error_number` 
from (
    select `service_id`, `user_number`, 0 as `error_number` from t1 
    union 
    select `service_id`, 0 as `user_number`, `error_number` from t2 
) t 
group by `service_id` 

demo这里。

+0

使用'工会all',不'union'。 –

0

你可以试试这个,队友:

SELECT 
    t1.id, 
    t1.service_id, 
    COALESCE(tb1.user_number, 0) `user_number`, 
    COALESCE(tb2.error_number, 0) `error_number` 
FROM 
    (
     SELECT id, service_id 
     FROM table1 
     UNION 
     SELECT id, service_id 
     FROM table2 
    ) t1 
    LEFT JOIN table1 tb1 ON tb1.service_id = t1.service_id 
    LEFT JOIN table2 tb2 ON tb2.service_id = t1.service_id; 
0

试试这个:

select COALESCE(t1_service,t2_service) as service_id, COALESCE(user_number,0) as user_number , COALESCE(error_number,0) as error_number 
from (
select t1.service_id as t1_service , t1.user_number , t2.error_number, t2.service_id as t2_service 
from table_1 t1 
LEFT OUTER JOIN table_2 t2 
on t1.service = t2.service 
union 
select t1.service_id as t1_service , t1.user_number , t2.error_number, t2.service_id as t2_service 
from table_1 t1 
Right OUTER JOIN table_2 t2 
on t1.service = t2.service 
)z1 
order by service_id 
相关问题