将其他表加入 return 个自定义结果
Join other tables to return customized result
我有以下 tables
产品table:
id
product_type
product_code
200
Camera
3222333
201
Television
5432322
202
PC
4332233
203
Mac
1244532
204
Notebook
7543223
product_released_country1 table:
id
product_code
released_year
1
3222333
2000
2
3222333
2001
3
3222333
2003
4
5432322
2000
5
5432322
2001
6
5432322
2010
product_released_country2 table:
id
product_code
released_year
1
4332233
2000
2
4332233
2001
3
4332233
2009
4
1244532
2000
5
1244532
2001
6
1244532
2010
在不同国家/地区发布的产品保存在 2 个不同的 table 中。我需要一个 return 所有产品的查询,方法是检查两个 table 以查看是否有任何产品已在 2010 年发布。如果该产品是在 2010 年发布的,则 return 'yes' 用于特定产品。如果产品未在 2010 年发布或在任何年份都未发布(例如:product_code 7543223),则查询应 return a 'no' is_product_released_in_2010列。
预期输出:
id
product_type
product_code
is_product_released_in_2010
200
Camera
3222333
no
201
Television
5432322
yes
202
PC
4332233
no
203
Mac
1244532
yes
204
Notebook
7543223
no
我尝试使用 union all 加入两个 tables,但仍然没有得到想要的结果。任何帮助将不胜感激。谢谢。
LEFT JOIN
并检查是否存在
SELECT p.id, p.product_type, p.product_code, CASE WHEN MAX(c1.id) IS NOT NULL OR MAX(c2.id) IS NOT NULL THEN 'yes' ELSE 'no' END is_product_released_in_2010
FROM product p
LEFT JOIN product_released_country1 c1 ON p.product_code = c1.product_code AND c1.released_year = 2010
LEFT JOIN product_released_country2 c2 ON p.product_code = c2.product_code AND c2.released_year = 2010
GROUP BY p.id, p.product_type, p.product_code
你可以用一个计数和一个联合来完成
select
p.id,
p.product_type,
p.product_code ,
(select count(*) from
(select product_code, released_year from product_released_country1
union all
select product_code, released_year from product_released_country2) as t
where t.product_code = p.product_code and t.released_year=2010)>0 as is_product_released_in_2010
from product p
我有以下 tables
产品table:
id | product_type | product_code |
---|---|---|
200 | Camera | 3222333 |
201 | Television | 5432322 |
202 | PC | 4332233 |
203 | Mac | 1244532 |
204 | Notebook | 7543223 |
product_released_country1 table:
id | product_code | released_year |
---|---|---|
1 | 3222333 | 2000 |
2 | 3222333 | 2001 |
3 | 3222333 | 2003 |
4 | 5432322 | 2000 |
5 | 5432322 | 2001 |
6 | 5432322 | 2010 |
product_released_country2 table:
id | product_code | released_year |
---|---|---|
1 | 4332233 | 2000 |
2 | 4332233 | 2001 |
3 | 4332233 | 2009 |
4 | 1244532 | 2000 |
5 | 1244532 | 2001 |
6 | 1244532 | 2010 |
在不同国家/地区发布的产品保存在 2 个不同的 table 中。我需要一个 return 所有产品的查询,方法是检查两个 table 以查看是否有任何产品已在 2010 年发布。如果该产品是在 2010 年发布的,则 return 'yes' 用于特定产品。如果产品未在 2010 年发布或在任何年份都未发布(例如:product_code 7543223),则查询应 return a 'no' is_product_released_in_2010列。
预期输出:
id | product_type | product_code | is_product_released_in_2010 |
---|---|---|---|
200 | Camera | 3222333 | no |
201 | Television | 5432322 | yes |
202 | PC | 4332233 | no |
203 | Mac | 1244532 | yes |
204 | Notebook | 7543223 | no |
我尝试使用 union all 加入两个 tables,但仍然没有得到想要的结果。任何帮助将不胜感激。谢谢。
LEFT JOIN
并检查是否存在
SELECT p.id, p.product_type, p.product_code, CASE WHEN MAX(c1.id) IS NOT NULL OR MAX(c2.id) IS NOT NULL THEN 'yes' ELSE 'no' END is_product_released_in_2010
FROM product p
LEFT JOIN product_released_country1 c1 ON p.product_code = c1.product_code AND c1.released_year = 2010
LEFT JOIN product_released_country2 c2 ON p.product_code = c2.product_code AND c2.released_year = 2010
GROUP BY p.id, p.product_type, p.product_code
你可以用一个计数和一个联合来完成
select
p.id,
p.product_type,
p.product_code ,
(select count(*) from
(select product_code, released_year from product_released_country1
union all
select product_code, released_year from product_released_country2) as t
where t.product_code = p.product_code and t.released_year=2010)>0 as is_product_released_in_2010
from product p