选择正确的查询
Chosing the right query
我必须构建一个将为客户创建 table 的查询 - 'Frank Spencer'(您将在下面的客户 table 中看到他)。
新 table 应该包含客户购买过的每件产品的总计,不包括尚未发货的订单,每个产品在新 [=37= 中只出现一次].
我的table如下。
你能告诉我下面哪一个是最好的吗?
a) with customer as (select * from customers where lower(CustomerName) = 'frank spencer'),customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
b) with customer as (select * from customers where lower(CustomerName) = 'frank spencer') join customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select total(oi.QuantityOrdered) as TotalOrdered, s.ItemName into new table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
c) with customer (select * from customers where 'frank spencer' in (CustomerName)) with customerorders (select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName create table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
d) using customer with (select * from customers where CustomerName = 'frank spencer' and customerorders with(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) then OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
B、C 和 D 中有一个 USING,据我所知,SQL 服务器不支持它。使用是,但不是使用。所以答案是A。下次,您可以使用poorsql.com来格式化您的代码,这样更容易发现错误。
WITH customer
AS (
SELECT *
FROM customers
WHERE lower(CustomerName) = 'frank spencer'
)
,customerorders
AS (
SELECT OrderId
FROM orders o
WHERE o.CustomerId IN (
SELECT CustomerId
FROM customer
)
AND OrderShipped = 'True'
)
SELECT sum(oi.QuantityOrdered) AS TotalOrdered
,s.ItemName
INTO franksorders
FROM orderitems oi
INNER JOIN stock s ON oi.StockItemId = s.StockItemId
WHERE OrderId IN (
SELECT *
FROM customerorders
)
GROUP BY ItemName
ORDER BY ItemName
我必须构建一个将为客户创建 table 的查询 - 'Frank Spencer'(您将在下面的客户 table 中看到他)。
新 table 应该包含客户购买过的每件产品的总计,不包括尚未发货的订单,每个产品在新 [=37= 中只出现一次].
我的table如下。
你能告诉我下面哪一个是最好的吗?
a) with customer as (select * from customers where lower(CustomerName) = 'frank spencer'),customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
b) with customer as (select * from customers where lower(CustomerName) = 'frank spencer') join customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select total(oi.QuantityOrdered) as TotalOrdered, s.ItemName into new table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
c) with customer (select * from customers where 'frank spencer' in (CustomerName)) with customerorders (select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName create table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
d) using customer with (select * from customers where CustomerName = 'frank spencer' and customerorders with(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) then OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName
B、C 和 D 中有一个 USING,据我所知,SQL 服务器不支持它。使用是,但不是使用。所以答案是A。下次,您可以使用poorsql.com来格式化您的代码,这样更容易发现错误。
WITH customer
AS (
SELECT *
FROM customers
WHERE lower(CustomerName) = 'frank spencer'
)
,customerorders
AS (
SELECT OrderId
FROM orders o
WHERE o.CustomerId IN (
SELECT CustomerId
FROM customer
)
AND OrderShipped = 'True'
)
SELECT sum(oi.QuantityOrdered) AS TotalOrdered
,s.ItemName
INTO franksorders
FROM orderitems oi
INNER JOIN stock s ON oi.StockItemId = s.StockItemId
WHERE OrderId IN (
SELECT *
FROM customerorders
)
GROUP BY ItemName
ORDER BY ItemName