Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.46 MB
Время: 0.008 c
14-1134504557
alex-drob
2005-12-13 23:09
2006.01.08
Как воспользоваться функцией


2-1133423104
worldmen
2005-12-01 10:45
2006.01.08
Передать данные в родительскую форму.


14-1134370442
wal
2005-12-12 09:54
2006.01.08
Как в России любят слуг народа.


4-1130909108
Muchacho
2005-11-02 08:25
2006.01.08
взять текст из чужого ListBox-a


14-1134418095
Knight
2005-12-12 23:08
2006.01.08
Кто знает, как перекрыть кислород?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский