Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 1 / 1
Регистрация: 07.09.2017
Сообщений: 9
1

1 Subquery returns more than 1 row

13.09.2017, 12:07. Показов 6597. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа, Hola! Есть запросик у меня и все вроде бы было хорошо и он отрабатывал, пока я не влепил подзапросы и он не выдал ошибочку: 1 Subquery returns more than 1 row...
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SELECT 
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos, 
  SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog, 
  ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL, 
  ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = 35 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date =
  (
  SELECT deal_date FROM deal WHERE deal_date BETWEEN '01.10.2017' AND '30.10.2017'
  ) 
 
UNION ALL 
 
SELECT 
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos, 
  SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog, 
  ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL, 
  ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = 36 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date = 
  (
  SELECT deal_date FROM deal WHERE deal_date BETWEEN '01.10.2017' AND '30.10.2017'
  )
Пожалуйста о магистры знаний, укажите верный путь... В чем может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2017, 12:07
Ответы с готовыми решениями:

UPDATE и Subquery returns more than 1 row
Здравствуйте. Помогите корректно записать запрос типа UPDATE table1 SET field1 = *some_value*...

Subquery returns more than 1 row при обновлении нескольких строк
Здравствуйте, никак не получается обновить количество товара в магазине при условии что они есть в...

ERROR: more than one row returned by a subquery
Доброго времени суток!! Может кто нибудь сталкивался с подобным родом ошибок? Как быть и что...

Элемент из одного row рядом с элементом другого row Bootstrap 4
Доброго всем времени суток! Есть линдос, который делится на 3-ри строки: Но в планшетной версии...

5
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
13.09.2017, 12:30 2
Цитата Сообщение от SmokeCWM Посмотреть сообщение
AND deal_date =
* (
* SELECT deal_date FROM deal WHERE deal_date BETWEEN '01.10.2017' AND '30.10.2017'
* )
не тут?
если несколько значений deal_date то нельзя писать =
0
0 / 1 / 1
Регистрация: 07.09.2017
Сообщений: 9
13.09.2017, 14:02  [ТС] 3
С этим разобрался: оказалось надо было просто условие прописать в самих запросах, а не создавать для этого подзапрос)
Но возникла другая проблемка:
в таблице Deal, откуда берется data_deal, помимо продаж с 01.10.2017 по 30.10.2017, есть еще продажи и за период с 01.11.2017 по 30.11.2017. И теперь он и кол-во проданного за 11 месяц плюсует к кол-ву за 10....

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
, SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
, ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
, ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
, 'October'
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = 35 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN '01.10.2017' AND '30.10.2017'
 
 
UNION  
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , 'October'
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = 36 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN '01.10.2017' AND '30.10.2017'
 
UNION 
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , 'October'
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = 34 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN '01.10.2017' AND '30.10.2017'
 
 
UNION 
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , 'October'
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = 71 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN '01.10.2017' AND '30.10.2017'
 
--  ORDER BY
--  'October'
Результат вот такой:
MerchantID|MerchNm | Pos | QSold| Itog | Comm | OKL | Salary |
35 |Mistie Brook |seller | 6 |201438| 20144 | 7800 | 27944 |
36 |Erick Rise |seller | 5 |234850| 23485 | 7800 | 31285 |
34 |Stevie T |seller | 3 |251990| 32759 | 8450 | 41209 |
71 |Elisa McJohnson |Sales Manager | 8 |307300| 55314 | 16400 | 71714 |
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
13.09.2017, 14:29 4
Цитата Сообщение от SmokeCWM Посмотреть сообщение
И теперь он
кто "он"?? запрос? "он" без тебя ничего делать не может

перепиши запрос через JOIN и все будет хорошо

чем у тебя запросы отличаются? только Deal_StfCrdRcd?
0
0 / 1 / 1
Регистрация: 07.09.2017
Сообщений: 9
14.09.2017, 14:04  [ТС] 5
Вообщем проблема была решена вот так:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
SET @vardt1 = '01.10.2017';
SET @vardt2 = '01.11.2017';
SET @vardt3 = '2017-10-01';
SET @vardt4 = '2017-10-30';
SET @vardt5 = '2017-11-01';
SET @vardt6 = '2017-11-30';
SET @varid1 = '34';
SET @varid2 = '35';
SET @varid3 = '36';
SET @varid4 = '71';
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt1) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid1 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt3 AND @vardt4
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt1) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid2 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt3 AND @vardt4
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt1) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid3 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt3 AND @vardt4
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt1) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid4 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt3 AND @vardt4
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt2) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid1 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt5 AND @vardt6
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt2) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid2 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt5 AND @vardt6
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt2) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid3 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt5 AND @vardt6
 
UNION
 
SELECT
  Deal_StfCrdRcd AS MerchantID, stfcrd.stfcrd_fio AS MerchNm, postemp.postemp_nm AS Pos
  , SUM(deal_col) AS QSold, SUM(deal_col * prod_prc) AS Itog
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm)) AS Comm, zrp_okl AS OKL
  , ROUND(SUM((deal_col * prod_prc) * zrp_comm) + zrp_okl) AS Salary
  , MONTHNAME(@vardt2) AS Mnh
FROM
  deal, stfcrd, postemp, prod, zrp
WHERE
  Deal_StfCrdRcd = @varid4 AND stfcrd.StfCrd_Rcd = deal.Deal_StfCrdRcd
  AND postemp.PostEmp_Rcd = stfcrd.StfCrd_PostEmpRcd
  AND prod.Prod_Rcd = deal.Deal_ProdRcd
  AND zrp.zrpstf_rcd = deal.Deal_StfCrdRcd
  AND deal_date BETWEEN @vardt5 AND @vardt6
Спасибо за наставления) Можно закрывать)
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
14.09.2017, 14:15 6
Цитата Сообщение от SmokeCWM Посмотреть сообщение
FROM
* deal, stfcrd, postemp, prod, zrp
вот это перепиши через JOIN
0
14.09.2017, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2017, 14:15
Помогаю со студенческими работами здесь

#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOB
При внесении данных в БД возникла ошибка.Ни как не могу заполнить таблицу. Помогите пожалуйста!

ms sql server insert into + select (1 row(s) affected) (1 row(s) affected)
Предыстория: при выполнении запроса в management studio добавляет одну строку в бд но в messages...

Limit и subquery
Имеется таблица T с полями: id, date, price. Нужно получить выборку, чтобы для каждого id были...

Subquery returned more than 1 value
Доброго дня. Microsoft SQL Server Есть таблица: CREATE TABLE .( IDENTITY(1,1) NOT NULL, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru