想要查询两张表:
表A:
| 名称 | 类型 | 价格
| ------ | ------ | ------
| 包 | 1 | 200
| 包 | 2 | 600
| 口红 |2 | 400
| 粉底液 | 1 | 300
表B:
| 名称 | 价格
| ------| ------
| 包 | 200
| 口红| 300
名称 | 类型 | 价格 |
---|---|---|
包 | 1 | 400 |
包 | 2 | 600 |
口红 | 1 | 300 |
口红 | 2 | 400 |
粉底液 | 1 | 300 |
(表A和表B合起来查询,表B内所有价格都属于1类型,如果表A中有对应名称的类型,则价格相加,如果表A中没有,则直接放入结果)
SQL语句怎么写,哭了!
SELECT A.名称, A.类型,A.价格 as 价格
from A left join B on A.名称 = B.名称
where A.价格 != 0 and B.价格 != 0 and A.类型 = 1 group by A.名称
目前只想打这个SQL语句,查询结果是:
| 名称 | 类型 | 价格
| ------ | ------ | ------
| 包 | 1 | 400
求SQL能人指点迷津!不甚感激。
先将两张表合并成一张表,然后再分组求和
select 名称,类型,sum(价格)
from (
select A.名称 as 名称,A.类型 as 类型,A.价格 as 价格
from A
union all
select B.名称 as 名称,1 as 类型,B.价格 as 价格
from B
)
group by 名称,类型
建议b表加一个类型字段,默认赋值为1。
不加的话可以试试这段sql
SELECT
a.*
FROM
(SELECT
t1.名称,
t1.类型,
CASE WHEN t2.名称 is not null THEN t1.价格 + t2.价格 ELSE t1.价格 END as 价格
FROM
test1 t1
LEFT JOIN
test2 t2
ON
t1.名称 = t2.名称 and t1.类型 = 1
union
SELECT
t2.名称,
1 as 类型,
t2.价格
FROM
test2 t2
LEFT JOIN
test1 t1
ON
t1.名称 = t2.名称 and t1.类型 != 1) a
GROUP BY
a.名称,a.类型
最后的SQL语句:
SELECT 名称, 类型, sum(价格) FROM
(select A.名称 as 名称,A.类型 as 类型,A.价格 as 价格
from A WHERE A.价格 > 0
union all
select B.名称 as 名称,1 as 类型,B.价格 as 价格
FROM B WHERE B.价格> 0
) as temp
group by 名称,类型;