Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизВопрос по SQL. Работа с таблицами. Найти похожие ветки
← →
Majesto (2005-12-19 23:22) [0]Задавал этот вопрос в форуме для начинающих, н так и не смог получить ответ=( Надеюсь на помощь здесь.
Есть три таблицы:
product (product_id, product_sku, product_name)
orders (order_id, order_subtotal, order_status. order_subtotal, order_tax)
order_item(order_id, product_id, order_status)
Мне необходимо написать sql запрос чтобы в результате выбора в програме определенного order_id (пользователь кликает на нужный номер в компоненте DBGrid) выводилась таблица с полями
product_sku, product_name, order_status, order_subtotal, order_tax
Я пробую написать запрос вида:
"SELECT product.product_sku, product.product_name, orders.order_status, orders.order_subtotal, orders.order_tax
FROM product, order_item, orders
WHERE order_item.order_id = :order_id AND product.product_id = order_item.product_id" Так вот в результате вместо одной строчки для определенного номера order_id я получаю несколько одинаковых. Причем product_sku и product_name повторяются, а значения order_status, order_subtotal, order_tax
представляют собой вариацию всех возможных значений в заданных таблицах.
Как сделать чтобы выводилась строчка без вариаций? Пробовал различные объединения делать но ничего путного не получилось.
Одному значением order_id может сответствовать несколько значений product_id и других полей.
← →
sniknik © (2005-12-19 23:48) [1]> Как сделать чтобы выводилась строчка без вариаций?
нужно задавать "безвариабельное" условие. например по ключевому полю.
> Одному значением order_id может сответствовать несколько значений product_id и других полей.
и что ты тогда хочеш? если значения дублируются с разных сторон при обьеденении то они и задваиваются/затраиваются/ в общем сколько раз условие совпадет столько строк и будет.
в общем получаеш ровно то что написал. (желания в расчет не идут. хотеть можно что угодно, действует то что написано)
можно попробовать переписать и делать обьеденение подзапросов в которых "вычленять" (если можно конечно) записи с уникальными полями обьеденения... но тогда могут быть потери (чегото не хватит). в обшем лучше структуру базы привести в надлежащий вид, а не парится с существующей.
← →
sniknik © (2005-12-20 00:10) [2]пример с "вычленением"
CREATE TABLE #t (ID INT, Sm INT)
INSERT INTO #t (ID, Sm) VALUES (1, 1)
INSERT INTO #t (ID, Sm) VALUES (1, 2)
INSERT INTO #t (ID, Sm) VALUES (2, 3)
INSERT INTO #t (ID, Sm) VALUES (2, 4)
CREATE TABLE #n (ID INT, Sm INT)
INSERT INTO #n (ID, Sm) VALUES (1, 1)
INSERT INTO #n (ID, Sm) VALUES (1, 2)
INSERT INTO #n (ID, Sm) VALUES (2, 3)
INSERT INTO #n (ID, Sm) VALUES (2, 4)
SELECT * FROM #t
SELECT * FROM #t INNER JOIN #n ON #t.ID=#n.ID
SELECT Sum(t.Sm) AS Sum1, Sum(n.Sm) AS Sum2 FROM
(SELECT ID, Sum(Sm) AS Sm FROM #t GROUP BY ID) AS t
INNER JOIN
(SELECT ID, Sum(Sm) AS Sm FROM #n GROUP BY ID) AS n
ON t.ID=n.ID
DROP TABLE #t
DROP TABLE #n
выполнить гденибудь (QA). первые два селекта просто показать что есть (пальцами потыкать и сосчитать ;) третий "типа рабочий".
← →
Majesto (2005-12-20 00:55) [3]2sniknik: Спасибо я разобрался.
В мой запрос надо было добавить еще одну фразу
Вот результат:
SELECT t2.order_id, t1.product_sku, t1.product_name, t2.order_status, t2.order_subtotal, t2.order_tax
FROM product AS t1, orders AS t2, order_item AS t3
WHERE t1.product_id = t3.product_id AND t2.order_id = t3.order_id AND t2.order_id = :order_id
все работает
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c