mysql 3 таблицы объединяются с обновления - PullRequest
2 голосов
/ 30 марта 2012

Я пытаюсь обновить статус столбца, проверяя две соединенные таблицы.Хотя я не получаю ошибку.Колум не обновляется.Я хочу взять общий идентификатор блочного графика и посмотреть, есть ли соответствующая транзакция или контейнер.Если есть транзакция, но нет контейнера, мне нужно пометить ее как P.

UPDATE (general
LEFT JOIN 
transactions 
ON 
general.blockplotid=transactions.blockplotid)
LEFT JOIN 
container 
ON 
general.blockplotid=container.blockplotid
SET general.lotstatus = 'P'
WHERE general.lotstatus != 'U' AND
transactions.id_transaction IS NOT NULL AND
container.id_container IS NULL

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

Когда я делаю оператор выбора двойного соединения.Запрос кажется правильным.

SELECT transactions.blockplotid AS blockplotid_2, container.blockplotid AS blockplotid_1, general.blockplotid, general.lotstatus, container.id_container, transactions.id_transaction
FROM ((general LEFT JOIN transactions ON general.blockplotid=transactions.blockplotid) LEFT JOIN container ON general.blockplotid=container.blockplotid)
ORDER BY general.blockplotid ASC

Однако кажется, что объединение для обновления не похоже на select.

Этот запрос, похоже, работал:

Этот запрос работал:

UPDATE ((general LEFT JOIN transactions ON transactions.blockplotid=general.blockplotid) LEFT JOIN container ON container.blockplotid=general.blockplotid)
SET general.lotstatus='P'
WHERE general.blockplotid!='U'  AND container.id_container is null  AND transactions.id_transaction is not null 

Разница здесь в случае IS NOT NULL, а также в порядке условия where.Есть ли объяснение этому?

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Я подозреваю, скобки / места соединения.Попробуйте настроить как это:

UPDATE

Table1

SET

Table1

. Field1 = StagingTable . Field1

FROM

Table1

INNER JOIN StagingTable
ON Table1 . Field2 = StagingTable . Field2
WHERE

StagingTable . Field3 IS NOT NULL 
0 голосов
/ 30 марта 2012

Я бы предложил реструктурировать ваш оператор UPDATE, чтобы иметь встроенный SUB-SELECT. обновить общий набор lottatus = (ВЫБРАТЬ .... ГДЕ ....)

...