我想根据另一个表中的值更新数据库中的一个表。 这两个表是:
QUOTES(
QUOTE_ID,
APPROVAL
)
PRODUCTS(
QUOTE_ID_FK,
LINE_APPROVAL
)
我需要将所有PRODUCTS.LINE_APPROVAL
更新为'Y'
QUOTES.APPROVAL = 'Y'
我尝试了类似的东西,但失败了,因为我没有正确的语法,但希望你能看到我想要实现的目标:
UPDATE
PRODUCTS
SET
LINE_APPROVAL = 'Y'
FROM
QUOTES,
PRODUCTS
WHERE
PRODUCTS.QUOTE_ID = QUOTES.QUOTE_ID_FK
AND
QUOTES.APPROVAL = 'Y'
任何帮助都将不胜感激。
答案 0 :(得分:3)
如果您调整ID列名称,则使用WHERE ... IN
的@joelharkes答案将起作用。您也可以使用MERGE:
MERGE INTO Products
USING (
SELECT Quote_ID FROM Quotes
WHERE Approval = 'Y') QtApp
ON (Products.Quote_ID_FK = QtApp.Quote_ID)
WHEN MATCHED THEN
UPDATE SET Line_Approval = 'Y'
答案 1 :(得分:2)
此查询将更新所有在PQUOTE_ID
中出现在引号表列Quote_ID_FK
中的值的产品(并且批准为Y)。
UPDATE
PRODUCTS
SET
LINE_APPROVAL = 'Y'
WHERE
PQUOTE_ID IN
(SELECT
QUOTE_ID_FK
FROM
QUOTES
WHERE
APPROVAL = 'Y')
答案 2 :(得分:0)
您的列名称位置错误。您的查询应该是:
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
FROM QUOTES, PRODUCTS
WHERE PRODUCTS.QUOTE_ID_FK = QUOTES.QUOTE_ID
AND QUOTES.APPROVAL = 'Y'
或INNER JOIN
:
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
FROM PRODUCTS
INNER JOIN QUOTES ON PRODUCTS.QUOTE_ID_FK = QUOTES.QUOTE_ID
WHERE QUOTES.APPROVAL = 'Y'
答案 3 :(得分:0)
试试这个
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
FROM PRODUCTS
INNER JOIN QUOTES ON PQUOTE_ID = QUOTE_ID_FK
WHERE APPROVAL = 'Y'
雅
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
WHERE PQUOTE_ID IN
(SELECT QUOTE_ID_FK FROM
QUOTES WHERE APPROVAL = 'Y')