Расширенный SQL ОБНОВЛЕНИЕ вопрос - PullRequest
1 голос
/ 19 сентября 2011

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

Мне нужно ВЫБРАТЬ все строки в таблице выкупа, где autokey оплаты соответствует redeem.pay. Номер бла. Включен в таблицу выплат, и в бла, я хочу получить дату бла. Затем мне нужно установить его на redeem.date и убедиться, что redeem.days_redeemed не равно 0.

UPDATE redeem
SET redeem.date =(SELECT blah.date
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem ON redeem.pay = pay.autokey
WHERE redeem.days_redeemed <>0)

Это ошибка, которую я получаю: Вы не можете указать целевую таблицу 'выкупить' для обновления в предложении FROM

Как мне сделать это в MySQL одним оператором SQL?

Ответы [ 4 ]

2 голосов
/ 19 сентября 2011
UPDATE
    redeem
  JOIN
    pay 
      ON pay.autokey = redeem.pay 
  JOIN
    blah
      ON blah.number = pay.number 
SET 
    redeem.date = blah.date
WHERE
    redeem.days_redeemed <> 0

Это тоже должно работать:

UPDATE
    redeem
SET 
    date = 
      ( SELECT blah.date
        FROM 
            blah
          JOIN
            pay 
              ON blah.number = pay.number 
        WHERE 
            pay.autokey = redeem.pay 
      )
WHERE
    days_redeemed <> 0
1 голос
/ 19 сентября 2011

попробуйте это:

UPDATE redeem SET redeem.date = blah.date
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem ON redeem.pay = pay.autokey
WHERE redeem.days_redeemed <>0
0 голосов
/ 19 сентября 2011

Вы должны использовать псевдоним для таблицы выкупа в предложении FROM:

    UPDATE redeem
    SET redeem.date =(SELECT blah.date
    FROM blah
    INNER JOIN pay ON pay.number = blah.number
    INNER JOIN redeem r ON r.pay = pay.autokey
    WHERE r.days_redeemed <>0)
0 голосов
/ 19 сентября 2011

Если вы заключите его в другой подзапрос (из-за способа, которым MySQL выдает подзапросы), он должен работать:

UPDATE redeem
SET redeem.date =(SELECT date from ( select * from
FROM blah
INNER JOIN pay ON pay.number = blah.number
INNER JOIN redeem ON redeem.pay = pay.autokey
WHERE redeem.days_redeemed <>0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...