繁体   English   中英

如何遍历表以填充 sql 中另一个表中的列?

[英]How do I loop through tables to fill columns in another table in sql?

所以我目前在SQL中有三个表:

Table One

姓名 代码 1 说明 1 代码 2 说明 2
苹果
鳄梨
卷心菜
奶酪

Level 1 Hierarchy

代码 描述
一个... 水果
C... 食物

Level 2 Hierarchy

代码 描述
阿普.. 种子果实
AV.. 核果
钙.. 蔬菜
中.. 乳制品

我正在尝试找到一个 SQL 查询来循环遍历两个层次结构表以填充table one ,如下所示。 我曾考虑过使用LIKE ,但有太多层次代码无法像这样通过它们手动 go。

姓名 代码 1 说明 1 代码 2 说明 2
苹果 一个... 水果 阿普.. 种子果实
鳄梨 一个... 水果 AV.. 核果
卷心菜 C... 食物 钙.. 蔬菜
奶酪 C... 食物 中.. 乳制品

我们有很多方法可以做到这一点,您也可以使用直接更新或使用 Cursor 如下 Select 语句并更新第二个表

DECLARE 
    @product_name VARCHAR(MAX), 
    @list_price   DECIMAL;

DECLARE cursor_product CURSOR
FOR SELECT 
        product_name, 
        list_price
    FROM 
        production.products;

OPEN cursor_product;

FETCH NEXT FROM cursor_product INTO 
    @product_name, 
    @list_price;

WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @product_name + CAST(@list_price AS varchar);
        FETCH NEXT FROM cursor_product INTO 
            @product_name, 
            @list_price;
      Update the table you want
    END;

CLOSE cursor_product;

尝试这个:

/*
WITH 
  T1 (Name) AS
  (
    VALUES
      'Apple'               
    , 'Avacado'                 
    , 'Cabbage'
    , 'Cheese'
  )
, L1 (Code, Description) AS
  (
    VALUES
      ('A...', 'Fruit')
    , ('C...', 'Food')
  )
, L2 (Code, Description) AS
  (
    VALUES
      ('Ap..', 'Seed Fruit')
    , ('Av..', 'Stone Fruit')
    , ('Ca..', 'Vegetable')
    , ('Ch..', 'Dairy')
  )
*/
SELECT 
  T1.Name
, L1.Code           AS Code1
, L1.Description    AS Description1
, L2.Code           AS Code2
, L2.Description    AS Description2
FROM T1
JOIN L1 ON T1.Name LIKE TRANSLATE (L1.Code, '', '.', '') || '%'
JOIN L2 ON T1.Name LIKE TRANSLATE (L2.Code, '', '.', '') || '%'
姓名 代码1 说明1 代码2 说明2
苹果 一个... 水果 阿普.. 种子果实
鳄梨 一个... 水果 AV.. 核果
卷心菜 C... 食物 钙.. 蔬菜
奶酪 C... 食物 中.. 乳制品

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM