Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос вернул больше одного значения / 25 сообщений из 26, страница 1 из 2
01.08.2019, 10:35
    #39843896
Вложенный запрос вернул больше одного значения
Здравствуйте, подскажите, пожалуйста, в чём может быть ошибка? Уже несколько раз перепроверил код, менял, всё что было было возможным, но ничего не получилось .
Выдаёт ошибку: "Сообщение 512, уровень 16, состояние 1, строка 1
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано."

Код: sql
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.
INSERT INTO [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB]
           (
            [ACC_MAT_CODE]
           ,[ACC_MAT_NAME]
           ,[ACC_MAT_MARK_NAME]
           ,[ACC_MAT_MARK_NTD]
           ,[ACC_MAT_SORT_NAME]
           ,[ACC_MAT_SORT_NTD]
           ,[DSN_MAT_CODE]
           ,[ACC_MAT_GROUP_NAME]
           ,[ACC_MAT_SUBGROUP_NAME]
)
SELECT
Код 
,Наименование
,Марка 
,(SELECT [Код] 
        FROM [Производство].[dbo].[НТД] 
            WHERE [Ключ] IN
             (SELECT [НТДМарки] FROM [Производство].[dbo].[Материал]
             WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])))
 
,Сортамент
,(SELECT [Код] 
        FROM [Производство].[dbo].[НТД] 
            WHERE [Ключ] IN
             (SELECT [НТДСортамента]FROM [Производство].[dbo].[Материал]
             WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])))
,Код
,(SELECT [Наименование]
    FROM [Производство].[dbo].[ГруппаМатериала]
  WHERE Ключ IN (SELECT Группа FROM [Производство].[dbo].[ГруппаМатериала] 
    WHERE [Ключ] IN (SELECT Группа FROM [Производство].[dbo].[Материал]
         WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB]))))
,(SELECT [Наименование]
    FROM [Производство].[dbo].[ГруппаМатериала]
  WHERE Ключ IN (SELECT Группа FROM [Производство].[dbo].[Материал]
         WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])))
  
  
FROM [Производство].[dbo].[Материал]
  WHERE  
                [Производство].[dbo].[Материал].[Код] NOT IN 
        (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])
...
Рейтинг: 0 / 0
01.08.2019, 10:53
    #39843908
Пупырышки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
вестник_проЗдравствуйте, подскажите, пожалуйста, в чём может быть ошибка? Уже несколько раз перепроверил код, менял, всё что было было возможным, но ничего не получилось .
Выдаёт ошибку: "Сообщение 512, уровень 16, состояние 1, строка 1
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано."

Код: sql
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.
INSERT INTO [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB]
           (
            [ACC_MAT_CODE]
           ,[ACC_MAT_NAME]
           ,[ACC_MAT_MARK_NAME]
           ,[ACC_MAT_MARK_NTD]
           ,[ACC_MAT_SORT_NAME]
           ,[ACC_MAT_SORT_NTD]
           ,[DSN_MAT_CODE]
           ,[ACC_MAT_GROUP_NAME]
           ,[ACC_MAT_SUBGROUP_NAME]
)
SELECT
Код 
,Наименование
,Марка 
,(SELECT [Код] 
        FROM [Производство].[dbo].[НТД] 
            WHERE [Ключ] IN
             (SELECT [НТДМарки] FROM [Производство].[dbo].[Материал]
             WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])))
 
,Сортамент
,(SELECT [Код] 
        FROM [Производство].[dbo].[НТД] 
            WHERE [Ключ] IN
             (SELECT [НТДСортамента]FROM [Производство].[dbo].[Материал]
             WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])))
,Код
,(SELECT [Наименование]
    FROM [Производство].[dbo].[ГруппаМатериала]
  WHERE Ключ IN (SELECT Группа FROM [Производство].[dbo].[ГруппаМатериала] 
    WHERE [Ключ] IN (SELECT Группа FROM [Производство].[dbo].[Материал]
         WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB]))))
,(SELECT [Наименование]
    FROM [Производство].[dbo].[ГруппаМатериала]
  WHERE Ключ IN (SELECT Группа FROM [Производство].[dbo].[Материал]
         WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])))
  
  
FROM [Производство].[dbo].[Материал]
  WHERE  
                [Производство].[dbo].[Материал].[Код] NOT IN 
        (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])



А нахера так писать? Все через Джонни и тогда увидите, где дубль образуется.
...
Рейтинг: 0 / 0
01.08.2019, 10:55
    #39843910
letefon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
подзапросы возвращают более одной записи
нужно переписать весь запрос, могу только догадываться как
...
Рейтинг: 0 / 0
01.08.2019, 11:01
    #39843911
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
Раз топик в вакансиях, то я "догадаюсь как" за 100 евро.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.08.2019, 11:04
    #39843915
letefon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
везде в подзапросах есть код
Код: sql
1.
2.
3.
SELECT Группа FROM [Производство].[dbo].[Материал]
         WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])



а внизу в общем условии
Код: sql
1.
2.
3.
4.
[Производство].[dbo].[Материал]
  WHERE  
                [Производство].[dbo].[Материал].[Код] NOT IN 
        (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])



обратить внимание в первом на
[Код] IN
во втором на
[Код] NOT IN
это опечатка?
или задумано? какой смысл?
...
Рейтинг: 0 / 0
01.08.2019, 11:07
    #39843918
Пупырышки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
letefonвезде в подзапросах есть код
Код: sql
1.
2.
3.
SELECT Группа FROM [Производство].[dbo].[Материал]
         WHERE [Код] IN
             (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])



а внизу в общем условии
Код: sql
1.
2.
3.
4.
[Производство].[dbo].[Материал]
  WHERE  
                [Производство].[dbo].[Материал].[Код] NOT IN 
        (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])



обратить внимание в первом на
[Код] IN
во втором на
[Код] NOT IN
это опечатка?
или задумано? какой смысл?

С этим у него все норм. Просто фильтр по материалам. Пипец, ну кто так пишет? Код ужасен.

"А чо там эти селекты писать. Это каждый может" (С) какой-то манагер.
...
Рейтинг: 0 / 0
01.08.2019, 11:09
    #39843921
Вложенный запрос вернул больше одного значения
letefon, второе - это чтобы добавились данные, с тем кодом, которого ещё не было, чтобы в итоге таблица без повторений была
...
Рейтинг: 0 / 0
01.08.2019, 11:10
    #39843922
МодальноеОкно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
а вопрос то в чем? написано же in - это подразумевает под собой возможность > 1 строки. может у вас "код" не является PK
...
Рейтинг: 0 / 0
01.08.2019, 11:15
    #39843926
Вложенный запрос вернул больше одного значения
МодальноеОкно, по отдельности куски кода работают, если вместо последней строки написать просто название столбца, без SELECT , но в данном случае так не получилось сделать
...
Рейтинг: 0 / 0
01.08.2019, 11:19
    #39843933
Пупырышки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
вестник_про,

это код T-SQL или какой-нить акцесс ?
...
Рейтинг: 0 / 0
01.08.2019, 11:21
    #39843935
letefon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
вестник_про,
тогда может быть все таки так ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT
MAT.Код 
,MAT.Наименование
,MAT.Марка 
,NDTMARK.[Код] 
,MAT.Сортамент
,NDTSORT.[Код]
,MAT.Код
,SUBGRMAT.[Наименование],
GRMAT.[Наименование]
FROM [Производство].[dbo].[Материал] as MAT
LEFT JOIN [Производство].[dbo].[ГруппаМатериала] as GRMAT ON GRMAT.[Ключ] = MAT.[Группа]
LEFT JOIN [Производство].[dbo].[ГруппаМатериала] as SUBGRMAT ON SUBGRMAT.[Ключ] = GRMAT.[Группа]
LEFT JOIN [Производство].[dbo].[НТД] as NDTSORT on NDTSORT.[Ключ] = MAT.[НТДСортамента]
LEFT JOIN [Производство].[dbo].[НТД] as NDTMARK on NDTMARK.[Ключ] = MAT.[НТДМарки]
WHERE MAT.[Код] NOT IN (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])
...
Рейтинг: 0 / 0
01.08.2019, 11:22
    #39843939
Вложенный запрос вернул больше одного значения
Пупырышки, Microsoft SQL Server
...
Рейтинг: 0 / 0
01.08.2019, 11:22
    #39843940
Александр Бердышев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
Проблема в том, что в ячейку пытаются вставить результат выполнения подзапроса. А он может вернуть несколько значений.
Если там сделать "SELECT TOP 1 [Код] FROM [Производство]" везде - то с ошибкой падать не будет, но будет неправильно работать.
Так-то советую посчитать про строковую агрегацию, какие там есть подходы - это именно тот случай.
...
Рейтинг: 0 / 0
01.08.2019, 11:25
    #39843945
suslupar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
ПупырышкиПипец, ну кто так пишет? Код ужасен.
Это вообще не код.

Похоже, что суть задачи в том, что нужно данные из одной таблички докинуть в другую, попутно дополнив недостающие поля по связанным табличкам. Я только не понял в чем работа, сделать за него или научить пользоваться join и прочим вариантам связки таблиц.
...
Рейтинг: 0 / 0
01.08.2019, 11:25
    #39843946
МодальноеОкно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
Пупырышкивестник_про,

это код T-SQL или какой-нить акцесс ?

это вьюхи к базе на mssql с русскими именами. возможно даже исходная база - 1с
...
Рейтинг: 0 / 0
01.08.2019, 11:32
    #39843955
Вложенный запрос вернул больше одного значения
МодальноеОкно, это по летней практике, создал базы и таблицы, имена писал на русском, чтобы не запутаться, насчёт JOIN знаний мало, поэтому решал таким не самым приличным кодом реализовать заполнение таблиц
...
Рейтинг: 0 / 0
01.08.2019, 11:39
    #39843961
suslupar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
вестник_про,

Вы как собрались с базами данных работать, не понимая элементарных связок таблиц? Это тема чуть ли не для первых занятий по теории БД.
...
Рейтинг: 0 / 0
01.08.2019, 11:39
    #39843963
letefon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
запрос пробовали выполнить? оно или не оно?

letefonвестник_про,
тогда может быть все таки так ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT
MAT.Код 
,MAT.Наименование
,MAT.Марка 
,NDTMARK.[Код] 
,MAT.Сортамент
,NDTSORT.[Код]
,MAT.Код
,SUBGRMAT.[Наименование],
GRMAT.[Наименование]
FROM [Производство].[dbo].[Материал] as MAT
LEFT JOIN [Производство].[dbo].[ГруппаМатериала] as GRMAT ON GRMAT.[Ключ] = MAT.[Группа]
LEFT JOIN [Производство].[dbo].[ГруппаМатериала] as SUBGRMAT ON SUBGRMAT.[Ключ] = GRMAT.[Группа]
LEFT JOIN [Производство].[dbo].[НТД] as NDTSORT on NDTSORT.[Ключ] = MAT.[НТДСортамента]
LEFT JOIN [Производство].[dbo].[НТД] as NDTMARK on NDTMARK.[Ключ] = MAT.[НТДМарки]
WHERE MAT.[Код] NOT IN (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])
...
Рейтинг: 0 / 0
01.08.2019, 11:41
    #39843967
Вложенный запрос вернул больше одного значения
letefon, спасибо большое, я пока изучаю Ваш код, потому что не особо понимаю
...
Рейтинг: 0 / 0
01.08.2019, 11:58
    #39843984
Вложенный запрос вернул больше одного значения
letefon, Вы гений, код безупречно сработал, а то свой я создавал около часа, ещё 2-3 часа не мог понять, как исправить. Как я могу Вас отблагодарить? У меня есть на вемани накопления, либо на телефон Вам скинуть ?

Модератор: Тема перенесена из форума "Вакансии".
...
Рейтинг: 0 / 0
01.08.2019, 12:11
    #39843992
letefon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
вестник_прокод безупречно сработал
не факт, я не знаю точную логику, пытался максимально приблизить к предполагаемому результату
запросе используется LEFT JOIN, а возможно правильно где-то или везде нужно INNER JOIN
зависит от обязательности заполнения ссылок на ключевые поля
...
Рейтинг: 0 / 0
01.08.2019, 12:43
    #39844013
Пупырышки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
letefonзапрос пробовали выполнить? оно или не оно?

letefonвестник_про,
тогда может быть все таки так ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT
MAT.Код 
,MAT.Наименование
,MAT.Марка 
,NDTMARK.[Код] 
,MAT.Сортамент
,NDTSORT.[Код]
,MAT.Код
,SUBGRMAT.[Наименование],
GRMAT.[Наименование]
FROM [Производство].[dbo].[Материал] as MAT
LEFT JOIN [Производство].[dbo].[ГруппаМатериала] as GRMAT ON GRMAT.[Ключ] = MAT.[Группа]
LEFT JOIN [Производство].[dbo].[ГруппаМатериала] as SUBGRMAT ON SUBGRMAT.[Ключ] = GRMAT.[Группа]
LEFT JOIN [Производство].[dbo].[НТД] as NDTSORT on NDTSORT.[Ключ] = MAT.[НТДСортамента]
LEFT JOIN [Производство].[dbo].[НТД] as NDTMARK on NDTMARK.[Ключ] = MAT.[НТДМарки]
WHERE MAT.[Код] NOT IN (SELECT [ACC_MAT_CODE] FROM [COMMON_BUFFER].[dbo].[ACC_MATERIALS_RFB])



А почему not in не вынести в джойн и потом сравнивать на IS NULL ?
...
Рейтинг: 0 / 0
01.08.2019, 13:35
    #39844065
letefon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
Пупырышкиletefonзапрос пробовали выполнить? оно или не оно?

пропущено...


А почему not in не вынести в джойн и потом сравнивать на IS NULL ?
можно и вынести
это не окончательный вариант, а попытка дать направление
...
Рейтинг: 0 / 0
01.08.2019, 14:37
    #39844121
Art_Serge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
letefon, попробуйте решить задачу на "каком-нибудь" Access. Сразу культура создания sql на порядок улучшится. Ну и про теорию не забудьте.
...
Рейтинг: 0 / 0
01.08.2019, 14:38
    #39844123
Art_Serge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенный запрос вернул больше одного значения
Art_Serge, это относится к "вестник_про "
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вложенный запрос вернул больше одного значения / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]