问题
I would like to update one table in my db depending on a value from another table. The 2 tables are:
QUOTES(
QUOTE_ID,
APPROVAL
)
PRODUCTS(
QUOTE_ID_FK,
LINE_APPROVAL
)
I need to update all PRODUCTS.LINE_APPROVAL to 'Y' where the QUOTES.APPROVAL = 'Y'
I have tried something like this but fails as I don't have the syntax quite right but hopefully you can see what I'm trying to achieve:
UPDATE
PRODUCTS
SET
LINE_APPROVAL = 'Y'
FROM
QUOTES,
PRODUCTS
WHERE
PRODUCTS.QUOTE_ID = QUOTES.QUOTE_ID_FK
AND
QUOTES.APPROVAL = 'Y'
Any help would be appreciated.
回答1:
this query will, update all products which have a value in PQUOTE_ID that appears in the quotes table column Quote_ID_FK (and approval is Y).
UPDATE
PRODUCTS
SET
LINE_APPROVAL = 'Y'
WHERE
PQUOTE_ID IN
(SELECT
QUOTE_ID_FK
FROM
QUOTES
WHERE
APPROVAL = 'Y')
回答2:
The @joelharkes answer with the WHERE ... IN will work if you adjust the ID column names. You can also use 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'
回答3:
try this
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
FROM PRODUCTS
INNER JOIN QUOTES ON PQUOTE_ID = QUOTE_ID_FK
WHERE APPROVAL = 'Y'
Ya
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
WHERE PQUOTE_ID IN
(SELECT QUOTE_ID_FK FROM
QUOTES WHERE APPROVAL = 'Y')
回答4:
You have your column names in the wrong place. Your query should be:
UPDATE PRODUCTS
SET LINE_APPROVAL = 'Y'
FROM QUOTES, PRODUCTS
WHERE PRODUCTS.QUOTE_ID_FK = QUOTES.QUOTE_ID
AND QUOTES.APPROVAL = 'Y'
Or 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'
来源:https://stackoverflow.com/questions/16168253/update-values-on-one-table-from-another-table-when-criteria-is-met