0

我想根据另一个表中的值更新我的数据库中的一个表。2张桌子是:

 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

4 回答 4

3

WHERE ... IN如果您调整 ID 列名称,@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'
于 2013-04-23T11:53:20.787 回答
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')
于 2013-04-23T11:34:54.973 回答
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'
于 2013-04-23T11:43:40.700 回答
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')
于 2013-04-23T11:45:39.633 回答