我想从另一个表中引入一个与我当前表中的ID相匹配的列。
我已经完成了以下查询:
SELECT dept, SUM(quantity) as TotalQuantity
FROM sale
GROUP BY dept
ORDER BY TotalQuantity;
这给了我特定“部门”售出的物品的总数,现在我想使用显式联接将部门的名称带到那里,而没有和带。部门名称位于另一个名为“ dept”的表中,该表的列为“ name”。还可以获取“销售”表的空值吗?
SELECT dept, SUM(quantity) as TotalQuantity
FROM sale
GROUP BY dept
ORDER BY TotalQuantity;
答案 0 :(得分:1)
正确的方法是使用显式的JOIN
:
SELECT d.name, d.dept, SUM(s.quantity) as TotalQuantity
FROM dept d JOIN
sale s
ON d.dept = s.dept
GROUP BY d.name, d.dept
ORDER BY TotalQuantity;
如果您要从dept
入所有行,即使没有销售,请使用LEFT JOIN
。
请注意表别名和限定列引用的使用。当查询引用多个表时,这些是最佳做法。
我绝不建议任何人在FROM
子句中使用逗号。这简直是不好的形式。您可以根据需要使用子查询:
SELECT (SELECT d.name
FROM dept
WHERE d.dept = s.dept
) as name
s.dept, SUM(s.quantity) as TotalQuantity
FROM sale s
GROUP BY s.dept
ORDER BY TotalQuantity;
或者,或者:
SELECT d.dept, d.name,
(SELECT SUM(s.quantity)
FROM sales s
WHERE s.dept = d.dept
) as TotalQUantity
FROM dept d
ORDER BY TotalQuantity;
这等效于LEFT JOIN
版本-它保留所有部门。使用正确的索引(在sales(dept, quantity)
上,它甚至可以是最快的版本。
答案 1 :(得分:0)
使用显式data:image/png;base64,iVBORw0KGgoAA...
(假设列JOIN
引用了sale.dept
):
dept.id
由于SELECT d.id d.name, SUM(s.quantity) AS TotalQuantity
FROM dept AS d
LEFT JOIN sale AS s ON d.id = s.dept
GROUP BY d.id d.name
ORDER BY TotalQuantity
,没有销售的部门也将出现在结果列表中。
这与使用隐式,旧式JOIN进行相同的查询并不太相关,但是应该是:
LEFT JOIN
答案 2 :(得分:0)
我还想展示未售出任何商品的部门,并将售出的商品数设为零:
这是正确的方法吗?
SELECT s.dept, d.name, SUM(s.quantity) as TotalQuantity
FROM sale s, dept d
WHERE d.number = s.dept AND s.quantity IS NULL
GROUP BY s.dept, d.name
ORDER BY TotalQuantity;