Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Вопрос по 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
14-1134601699
ZeeM
2005-12-15 02:08
2006.01.08
Преобразование AnsiString во флоат


14-1134548344
Lost_delpher
2005-12-14 11:19
2006.01.08
конверт TDateTime - DOUBLE - разные рез-ты


2-1134993484
skysat
2005-12-19 14:58
2006.01.08
Ошибка


2-1134845614
Exploit
2005-12-17 21:53
2006.01.08
Мышь


1-1133786482
TBeginner
2005-12-05 15:41
2006.01.08
Бредовае сохранение форматирования текста