满足条件时,从另一个表更新一个表上的值

时间:2013-04-23 11:30:38

标签: sql oracle

我想根据另一个表中的值更新数据库中的一个表。 这两个表是:

 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'

任何帮助都将不胜感激。

4 个答案:

答案 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')