用sql语句如何将两张表中的一列数据进行比对。

如附件,X和Y两个表,怎么写才能得到下方那个表... 如附件,X和Y两个表,怎么写才能得到下方那个表 展开
 我来答
阿刚炖蛋
2019-06-05 · TA获得超过3004个赞
知道大有可为答主
回答量:1789
采纳率:92%
帮助的人:993万
展开全部

你好!

  1. 先获取不重复的ID,即x、y表的不重复并集,观察x、y表结构类似,通过union进行排重即可。

  2. 使用第一步获取的数据进行左链接x、y表的扩展表(第3步)。

  3. 分别对x、y表进行分组并合计,针对图片中y表中ID为A的记录出现多次,最后显示为ID为A的盘点数量为2,这样的数据进行处理,以方便最后显示。

  4. 通过(库存数-盘点数)得到比对字段值。

SELECT
t.ID,
IFNULL(t.`库存数量`, 0) `库存数量`,
IFNULL(t.`盘点数量`, 0) `盘点数量`,
(
IFNULL(t.`库存数量`, 0) - IFNULL(t.`盘点数量`, 0)
) `比对`
FROM
(
SELECT
a.ID ID,
p1.`库存数量`,
p2.`盘点数量`
FROM
(
SELECT
ID
FROM
x
UNION
SELECT
ID
FROM
y
) a
LEFT JOIN (
SELECT
ID,
sum(`库存数量`) `库存数量`
FROM
x
GROUP BY
ID
) p1 ON a.id = p1.id
LEFT JOIN (
SELECT
ID,
sum(`盘点数量`) `盘点数量`
FROM
y
GROUP BY
ID
) p2 ON a.id = p2.id
) t
ORDER BY
ID

希望对你有帮助!

追问
谢谢,有个小问题,UNION是本身就有带去重复的功能吗
追答
是的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式