LINUX.ORG.RU

помогите правильно написать SQL запрос

 


0

1

Здравствуйте. пишу запрос к sqlite3. В обычных sql запросах я чуть-чуть понимаю. Но когда что-то сложнее обычных SELECT'ов то уже сложновато... мой код:

SELECT 
 	history.id as ___idx___,
 	worker.name as name,
 	clients.name_1 as name_1,
 	clients.name_2 as name_2,
 	history.date as date,
 	history.finish_date as finish_date,
 	(SELECT SUM(price)
 	 FROM history_list
 	 WHERE history_list.id=___idx___) as price
FROM 
 	history
 	INNER JOIN
 		worker ON history.worker_id=worker.id
 	INNER JOIN
 		clients ON history.client_id=clients.id

Ошибочку я получаю возле idx (нижние подчеркивания для того, что бы более наглядно тут продемонстрировать)

Насколько я понимаю во вложенном запросе idx так сказать не в поле видимости.

Подскажите, пожалуйста, как правильно написать такого рода запрос( на сколько я понимаю, здесь нужно что-то типа plSQL'а)?

★★★

Ответ на: комментарий от visual

да толком таблица ничего и не говорит...

Error: no such column: idx
sqlite> 

disee ★★★
() автор топика
Ответ на: комментарий от ziemin

общая сумма заказа по каждому из продуктов (заказ может состоять из нескольких продуктов)

disee ★★★
() автор топика
Ответ на: комментарий от disee

У тебя же указано

history.id as ___idx___

а далее в запросе пытаешься этот идентификатор (который должен использоваться для представления - заголовка столбца при выводе), поэтому я указал вполне логичное исправление. Проверяй логику запроса.

Что ты пытаешься им сделать?

Genuine ★★★
()
(SELECT SUM(price)
 	 FROM history_list
 	 WHERE history_list.id=___idx___) as price

history_list.id - это вероятно первичный ключ, по аналогии с другими таблицами ?

В таком случае будет извлекаться не связанная с таблицей history строка, а строка уникальный id которой совпадает с таким у строки из history.

Вероятно имелось ввиду:

history_list.history_id = history_id.id

hidden_4003
()

SELECT
history.id as ___idx___,
worker.name as name,
clients.name_1 as name_1,
clients.name_2 as name_2,
history.date as date,
history.finish_date as finish_date,
SUM(history_list.price) as price
FROM
history
INNER JOIN
worker ON history.worker_id=worker.id
INNER JOIN
clients ON history.client_id=clients.id
JOIN
history_list ON history_list.id=___idx___
GROUP BY ___idx___

Сорри, нет возможности выбрать LORCODE, хз почему.

tuxin
()
Ответ на: комментарий от Genuine
+-----------+           +-------------+
| history   |           |history_list |
+-----------+           +-------------+
|id         |------\    |id           |
|worker_id  |       \-->|history_id   |
|client_id  |           |product_id   |
|date       |           |ccount       |
|finish_date|           |price        |
+-----------+           +-------------+
Я уже не рисовал связь worker и clients потому что думаю что это и так понятно.

Суть в том, что есть какое то событие(покупка), в этом событии участвовало много товаров, каждый из которых имел свою ценую. Теперь я хочу узнать, сколько за собыите X было потрачено денег (т.е. нужно просуммировать цены, у которых history_id относиться к данному событию. (ну и помимо этого узнать имя клиента, имя рабочего и т.д...)

disee ★★★
() автор топика
Ответ на: комментарий от disee

SELECT
history.id as ___idx___,
worker.name as name,
clients.name_1 as name_1,
clients.name_2 as name_2,
history.date as date,
history.finish_date as finish_date,
SUM(history_list.price) as price
FROM
history
INNER JOIN
worker ON history.worker_id=worker.id
INNER JOIN
clients ON history.client_id=clients.id
JOIN
history_list ON history.id=history_list.history_id
GROUP BY history.id

tuxin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.