2017-01-26 10 views
0

Я пытаюсь вставить некоторые значения (CIID и AID), взятые из других таблиц, но, как не эксперт, мне не удавалось это сделать.Вставить запрос с подзапросами

Вставка запроса:

INSERT INTO INST_ACTIVE_ACTIONS act 
    (act.CIID, act.AID, act.STEPNUM, act.CREATEDATE) 
VALUES 
    (CIID , ,0,GETDATE()) 

CIID запроса является:

SELECT C.CIID FROM INST_COURSE C 
LEFT JOIN INST_ACTIVE_ACTIONS AA ON (AA.CIID = C.CIID) 
LEFT JOIN INST_TASKS T ON (T.CIID = C.CIID) 
LEFT JOIN SYS_SCH_ACTION SCH ON (SCH.CIID = C.CIID) 
LEFT JOIN SYS_SUB_STACK SUB ON (SUB.RETURN_CIID=C.CIID) 
WHERE C.COMPLETED IS NULL AND AA.AID IS NULL AND T.AID IS NULL AND SCH.AID IS NULL AND SUB.RETURN_AID IS NULL 

АИД запроса является:

SELECT TOP 1 ca.AID 
FROM INST_COMPLETE_ACTIONS CA 
    INNER JOIN TMPL_ACT_MASTER TAM ON CA.AID=TAM.AID 
WHERE ca.CIID =c.CIID ORDER BY TSTAMP DESC 

act.CIID = C.CIID = ca.CIID и CA.AID = act.AID

Отредактировано:

последний запрос

INSERT INTO INST_ACTIVE_ACTIONS (CIID,AID,stepnum,CREATEDATE 
      ) 

      VALUES 

     (
       (SELECT c.CIID 
       FROM  INST_COURSE C 
       LEFT JOIN INST_ACTIVE_ACTIONS AA 
       ON  (
            aa.CIID = c.CIID) 
       LEFT JOIN INST_TASKS T 
       ON  (
            t.CIID = c.CIID) 
       LEFT JOIN SYS_SCH_ACTION SCH 
       ON  (
            sch.CIID = c.CIID) 
       LEFT JOIN sys_sub_stack SUB 
       ON  (
            sub.RETURN_CIID = c.CIID) 
       WHERE  c.completed IS NULL 
       AND  aa.AID IS NULL 
       AND  t.AID IS NULL 
       AND  sch.AID IS NULL 
       AND  sub.return_AID IS NULL), 
     (
        SELECT TOP 1 
          ca.AID 
        FROM  INST_COMPLETE_ACTIONS CA 
        INNER JOIN tmpl_act_master TAM 
        ON   ca.AID=tam.AID 

        ORDER BY tstamp DESC 
       ), 
     0, 
     Getdate()) 

, но я получаю сообщение об ошибке, как

Msg 512, уровень 16, состояние 1, строка 1 Subquery вернулся более чем на 1 стоимость. Это не допускается, когда подзапрос следует =,! =, <, < =,

,> = или когда вложенный запрос используется в качестве выражения. Заявление было прекращено.

+0

Какая СУБД вы используете? –

+0

SQL 2012 @a_horse_with_no_name –

+0

Если вы собираетесь делать это 'ca.CIID = c.CIID', вам нужно отправить запросы вместе. – Edward

ответ

1

Просто сконденсированный, хотя он действительно занят, если вы спросите меня.

INSERT INTO INST_ACTIVE_ACTIONS 
(CIID, AID, STEPNUM, CREATEDATE) 
--OUTPUT INSERTED.* --if you want to see what was inserted uncomment this 
(SELECT C.CIID, 
    (SELECT TOP 1 CA.AID 
     FROM INST_COMPLETE_ACTIONS CA 
     INNER JOIN TMPL_ACT_MASTER TAM ON CA.AID=TAM.AID 
     WHERE CA.CIID =C.CIID ORDER BY TSTAMP DESC) 
     , 0,GETDATE()) 
FROM INST_COURSE C 
LEFT JOIN INST_ACTIVE_ACTIONS AA ON (AA.CIID = C.CIID) 
LEFT JOIN INST_TASKS T ON (T.CIID = C.CIID) 
LEFT JOIN SYS_SCH_ACTION SCH ON (SCH.CIID = C.CIID) 
LEFT JOIN SYS_SUB_STACK SUB ON (SUB.RETURN_CIID=C.CIID) 
WHERE C.COMPLETED IS NULL AND AA.AID IS NULL AND T.AID IS NULL AND SCH.AID IS NULL AND SUB.RETURN_AID IS NULL) 

Исправленный. испытал и работал на моем конце. Я все еще думаю, что если у вас есть контроль над этими таблицами, вы можете взглянуть на концепцию нормализации таблиц базы данных.

+0

спасибо за заботу, но первый выбор имеет ошибку .... 'Msg 156, Level 15, State 1, Line 5 Неправильный синтаксис рядом с ключевым словом «SELECT». Msg 102, уровень 15, состояние 1, строка 15 Неверный синтаксис рядом с ')'. ' –

+0

Иногда это просто требует добавления псевдонимов. Я переделаю его. в противном случае мне нужно создать аналогичную настройку для фактического тестирования моего кода. – Edward

+0

спасибо за ваше время и помощь ... –

0

Вы всегда можете выполнить что-то подобное и использовать как можно больше подзапросов. Убедитесь, что типы совпадают с обеих сторон.

Insert into table1 (value1, value2) Select val1,val2 from table2 ... 

редактировать

INSERT INTO INST_ACTIVE_ACTIONS акт (act.CIID, act.AID, act.STEPNUM, act.CREATEDATE) Выберите (SELECT FROM C.CIID INST_COURSE C LEFT JOIN INST_ACTIVE_ACTIONS AA ON (AA.CIID = C.CIID) LEFT JOIN INST_TASKS T ON (T.CIID = C.CIID) LEFT JOIN SYS_SCH_ACTION SCH ON (SCH.CIID = C.CIID) LEFT JOIN SYS _SUB_STACK SUB ON (SUB.RETURN_CIID = C.CIID) WHERE C.COMPLETED NULL AND AAAID NULL AND T.AID NULL AND SCH.AID IS NULL AND SUB.RETURN_AID IS NULL), (SELECT TOP 1 cAID FROM INST_COMPLETE_ACTIONS CA INNER JOIN TMPL_ACT_MASTER TAM ON CA.AID = TAM.AID WHERE ca.CIID = c.CIID ORDER BY TSTAMP DESC act.CIID = C.CIID = cIID и CA.AID), 0, GETDATE()

+0

я не то, что опытный))) –

+0

Смотрите издание – INgeek

+0

последняя часть странно ... 'WHERE ca.ciid = c.ciid ORDER BY TSTAMP DESC act.ciid = c.ciid = ca.ciid И ca.aid), ' –

 Смежные вопросы

  • Нет связанных вопросов^_^