我有3张桌子。 表1:
Products:
ProductId Category Model Price Quantity
表2:
OrderLines:
OrderId ProductId Quantity
table3:
Orders:
OrderId CustomerId
(还有一个客户表,但这没关系)
现在,我想从OrderLines表中具有ProductId = ProductId的Products表中选择所有产品数据,但要从OrderLines表中获取(相同产品的)数量数据。
尝试了各种查询,找不到有效的查询。
这是我尝试过的最后一件事:
SELECT tb1.* ,tb2.[Quantity]
FROM [Products] tb1, [OrderLines] tb2
WHERE tb1.[ProductId] IN (
SELECT [ProductId] FROM [OrderLines] WHERE OrderId = @orderId)
INNER JOIN [OrderLines] tb2 ON[Products].Quantity = [OrderLines].Quantity";
没用。
有什么建议吗?
非常感谢。
样本数据:
订单:
OrderId CustomerId
1 2
OrderLines:
OrderId ProductId数量
1 3 1
1 4 5
产品:
ProductId类别型号价格数量
3“哇”“高清” 30 5
4“ yay”“ sd” 50 60
5“哇”“ ss” 12 5
预期输出:
产品系列:
每个对象都是Product类型,在表中具有相同的字段。 (已经定义为类)。
数组中的第一个对象是:
productId = 3,类别=“哇”,型号=“ hd”,价格= 30,数量=
1(** 1!不是5)
第二个对象:
productId = 4,Category =“ yay”,Model =“ sd”,price = 50,Quantity = 5
我在Visual Studio Winforms中使用c#。 数据库是Access。 这是功能:
public Product[] GetProductsByOrderId(int orderId)
{
DataSet ds = new DataSet();
ArrayList arrProducts = new ArrayList();
//"SELECT tb1.* ,tb2.[Quantity] FROM [Products] tb1, [OrderLines] tb2 WHERE tb1.[ProductId] IN (SELECT [ProductId] FROM [OrderLines] WHERE OrderId = @orderId) INNER JOIN [OrderLines] tb2 ON[Products].Quantity = [OrderLines].Quantity"
string cmdStr = "SELECT p.*, ol.Quantity as OrderLineQuantity from Products as p inner join OrderLines as ol on p.Id = ol.ProductId";
using (OleDbCommand command = new OleDbCommand(cmdStr))
{
command.Parameters.AddWithValue("@orderId", orderId);
ds = GetMultipleQuery(command);
}
DataTable dt = new DataTable();
try
{
dt = ds.Tables[0];
}
catch { }
foreach (DataRow tType in dt.Rows)
{
Product productData = new Product();
productData.ProductId = int.Parse(tType[0].ToString());
productData.Category = tType[1].ToString();
productData.Model = tType[2].ToString();
productData.Price = double.Parse(tType[3].ToString());
productData.Quantity = int.Parse(tType[4].ToString());
arrProducts.Add(productData);
}
return (Product[])arrProducts.ToArray(typeof(Product));
}
对不起,我希望现在更加清楚。
答案 0 :(得分:1)
根据连接,这将为您提供来自产品的四列和来自订单行的一列。
SELECT p.productId, p.category, p.model, p.price, o.quantity
from products p
join orderlines o on p.productid = o.productid
小写样式说明-请勿在表名中使用复数形式。例如使用 产品不是产品,订单不是订单。没有很好的理由,除了那是每个人的做法。
答案 1 :(得分:0)
有效的实际查询是:
SELECT p.ProductId, p.Category, p.Model, p.Price, o.Quantity
FROM [Products] p
INNER JOIN [OrderLines] o ON p.ProductId = o.ProductId
WHERE o.OrderId = @orderId
ORDER BY p.ProductId
感谢@Hogan让我朝正确的方向开始。
由于提到了卢卡斯(lucas),因此进行了编辑,删除了WHERE IN SELECT ......
答案 2 :(得分:-1)
select p.ProductId,sum(ol.Quantity)
from Products p
inner join orderlines ol on p.ProductID=ol.ProductID
group by p.ProductId
答案 3 :(得分:-1)
SELECT p.*, ol.Quantity as OrderLineQuantity from
Products as p
inner join
OrderLines as ol
on p.Id = ol.ProductId