我有以下表格
產品表:
| ID | 產品類別 | 產品代碼 |
|---|---|---|
| 200 | 相機 | 3222333 |
| 201 | 電視 | 5432322 |
| 202 | 個人電腦 | 4332233 |
| 203 | 蘋果電腦 | 1244532 |
| 204 | 筆記本 | 7543223 |
product_released_country1 表:
| ID | 產品代碼 | 發布年份 |
|---|---|---|
| 1 | 3222333 | 2000 |
| 2 | 3222333 | 2001年 |
| 3 | 3222333 | 2003年 |
| 4 | 5432322 | 2000 |
| 5 | 5432322 | 2001年 |
| 6 | 5432322 | 2010 |
product_released_country2 表:
| ID | 產品代碼 | 發布年份 |
|---|---|---|
| 1 | 4332233 | 2000 |
| 2 | 4332233 | 2001年 |
| 3 | 4332233 | 2009 |
| 4 | 1244532 | 2000 |
| 5 | 1244532 | 2001年 |
| 6 | 1244532 | 2010 |
在不同國家/地區發布的產品保存在 2 個不同的表中。我需要一個查詢來通過檢查兩個表來回傳所有產品,以查看是否有任何產品已在 2010 年發布。如果產品是在 2010 年發布的,則為特定產品回傳“是”。如果產品在 2010 年沒有發布或者在任何年份都沒有發布(例如:product_code 7543223),那么查詢應該為 is_product_released_in_2010 列回傳“no”。
預期輸出:
| ID | 產品類別 | 產品代碼 | is_product_released_in_2010 |
|---|---|---|---|
| 200 | 相機 | 3222333 | 不 |
| 201 | 電視 | 5432322 | 是的 |
| 202 | 個人電腦 | 4332233 | 不 |
| 203 | 蘋果電腦 | 1244532 | 是的 |
| 204 | 筆記本 | 7543223 | 不 |
我嘗試使用 union all 加入這兩個表,但仍然沒有得到想要的結果。任何幫助將不勝感激。謝謝你。
uj5u.com熱心網友回復:
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
演示
uj5u.com熱心網友回復:
你可以用一個計數和一個聯合來做到這一點
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
這里的例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/407038.html
標籤:
上一篇:多語言資料庫設計中的回退
