简单的问题,但我没有办法去完成它。
Table 1.
ID Quantity
1 4
2 5
3 2
Table 2
ID Quantity
2 1
3 2
我希望查询获得以下结果:
Table result
ID Quantity
1 4
2 4
我一直在寻找与MINUS运算符或NOT IN相关的东西,但问题是我想在同一查询中减去数量。
编辑:表1总是大于表2.表2不能包含表1中没有的id。
我希望这个例子澄清了这个问题。
此致!!
答案 0 :(得分:0)
听起来像连接的经典用例:
SELECT table1.value - COALESCE(table2.value, 0) AS value
FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.id
WHERE table1.value != table2.value
-- insert order by clauses/etc if needed
这将计算table2的值减去table1的值。 You can get a good overview of different joins here。这使用了左连接,该连接仅包含匹配table1
和table2
中的ID的结果,然后使用COALESCE
来转换null
/非从table2匹配到0
。
最后一个语句的目的是最终删除等于0的结果,因此不包括(3, 0)
结果。
您还可以将此联接用于create a view of the output,这有点像缓存和加速查找等优势。
答案 1 :(得分:0)
使用此SELECT语句:
SELECT T1.ID, T1.Quantity - COALESCE(T2.Quantity, 0) AS Quantity
FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID
ORDER BY T1.ID;
答案 2 :(得分:0)
SELECT table1.value - IFNULL(table2.value, 0) AS value
FROM table1
LEFT JOIN table2
ON table1.ID = table2.ID
WHERE table1.value > table2.value
引导您完成上述查询。您在此处使用LEFT JOIN
来组合两个表。 LEFT JOIN
是专门使用的,因为并非所有表1 ID都保证显示在表2中,但您仍希望输出这些结果。您在ON
条件下使用该ID,因为这是您匹配表的方式。您需要包含IFNULL
语句,因为没有匹配的表2 ID的表1 ID将导致该连接行的NULL表2值。然后,您减去这两个值以获得结果。这里的WHERE
子句将删除返回值等于或小于零的行。