Главная страница
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.019 c
2-1134909043
Bounty
2005-12-18 15:30
2006.01.08
WebBrowser


2-1135187302
nirvana
2005-12-21 20:48
2006.01.08
КАк сделать ЛОГ??????????


2-1135237508
kyn66
2005-12-22 10:45
2006.01.08
RoundTo работает неверно?


2-1134922994
Arazel
2005-12-18 19:23
2006.01.08
Как отсортировать название файлов/папок ListBox как Explorer?


1-1133955846
Aleksandr.
2005-12-07 14:44
2006.01.08
Как определить видимость дочернего окна?