I have two tables that I need to merge.
Table 1 is :
ID | Product code | Spend |
---|---|---|
1 | 101 | 100 |
1 | 102 | 200 |
1 | 103 | 300 |
2 | 201 | 400 |
3 | 301 | 500 |
3 | 302 | 600 |
Table 2 has
ID | Product code | Spend | Product tenure |
---|---|---|---|
1 | 101 | 100 | 20 |
1 | 102 | 200 | 30 |
3 | 302 | 600 | 40 |
I want to merge these such that only ID's present in table 2 are retained from table 1. Table 2 does not contain all the product codes for each ID, but I want my final table to have it.
Output must have
ID | Product code | Spend | Product tenure |
---|---|---|---|
1 | 101 | 100 | 20 |
1 | 102 | 200 | 30 |
1 | 103 | 300 | |
3 | 301 | 500 | |
3 | 302 | 600 | 40 |
Any help on this would be appreciated. I tried left join on ID, but it produces many duplicates.
CodePudding user response:
Test this:
SELECT *
FROM t1
LEFT JOIN t2 AS t21 USING (ID, `Product code`)
WHERE EXISTS ( SELECT NULL
FROM t2 AS t22
WHERE t1.ID = t22.ID )
PS. The query will return 2 Spent
columns (they're present in each table, and nothing prevents their values to be not equal...) - so replace an asterisk with definite columns list.
CodePudding user response:
SELECT *,
(
SELECT `product_tenure`
FROM `second_table`
WHERE `second_table`.`id` = `first_table`.`id`
AND `first_table`.`product_code` = `second_table`.`product_code`
) product_tenure
FROM `first_table`
WHERE `id` IN (SELECT DISTINCT `id` FROM `second_table`)
Explaination:
Select id
from second table
, which wanted to keep
from first table.
Because the product_tenure
only in second_table
select them with combined id
and product_code
Result: