у меня 3 таблицы.
таблица1:
Products:
ProductId Category Model Price Quantity
table2:
OrderLines:
OrderId ProductId Quantity
Таблица3:
Orders:
OrderId CustomerId
(есть также таблица клиентов, но это не имеет значения)
Теперь я хочу выбрать все данные о товарах из таблицы Products, для которых ProductId = ProductId в таблице OrderLines имеет ProductId =, но получить данные о количестве (тех же товаров) из таблицы 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 "вау" "hd" 30 5
4 "yay" "sd" 50 60
5 "вау" "сс" 12 5
ожидаемый результат:
массив продуктов:
каждый объект имеет тип Product, имеющий те же поля, что и в таблице. (уже определено, это класс).
Первый объект в массиве:
productId = 3, категория = "вау", модель = "hd", цена = 30, количество =
1 (** 1! Не 5)
2-й объект:
productId = 4, категория = "yay", модель = "sd", цена = 50, количество = 5
Я использую c # в visual studio, Winforms.
база данных 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));
}
Извините, и я надеюсь, теперь стало понятнее.