Sql 匹配具有不同表的列名的管道分隔字符串,列名匹配后将其更新为';好';

Sql 匹配具有不同表的列名的管道分隔字符串,列名匹配后将其更新为';好';,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,例如,字符串(表T中有行星名称的列)=‘太阳|地球|火星’; 表(T)列标题为行星、太阳、金星和火星 由于Mars在两者中都很常见,因此应将Mars的值更新为表T中的Y 表T有这样50多列,我必须提取并匹配这些列,然后更新为Y | pluto | Sun | Earth | Mars | Planets | |-------|---------|-----------|---------| --------------------- | |

例如,字符串(表T中有行星名称的列)=‘太阳|地球|火星’; 表(T)列标题为行星、太阳、金星和火星

由于Mars在两者中都很常见,因此应将Mars的值更新为表T中的Y

表T有这样50多列,我必须提取并匹配这些列,然后更新为Y

| pluto |   Sun   |   Earth   |  Mars   |  Planets               |
|-------|---------|-----------|---------|  --------------------- |
|       |   Y     |    Y      |   Y     | Sun|Earth|Mars         |
|  Y    |         |    Y      |         |   Pluto|Earth          |
|       |         |           |         |    (Blank)             |

如果行星列数据与太阳或地球等其他列匹配,则将这些列更新为Y。

如果我理解清楚,您可能需要:

update T
set Pluto   = case when planets like '%Pluto%' then 'Y' end,
    Sun     = case when planets like '%Sun%'   then 'Y' end,
    Earth   = case when planets like '%Earth%' then 'Y' end,   
    Mars    = case when planets like '%Mars%'  then 'Y' end
例如:

SQL> create table T (
  2      Pluto   varchar2(1),
  3      Sun     varchar2(1),
  4      Earth   varchar2(1),
  5      Mars    varchar2(1),
  6      Planets varchar2(100)
  7  );

Table created.

SQL> insert into T (Pluto, Sun, Earth, Mars, Planets) values (null, null, null, null, 'Sun|Earth|Mars');

1 row created.

SQL> insert into T (Pluto, Sun, Earth, Mars, Planets) values (null, null, null, null, 'Pluto|Earth');

1 row created.

SQL> insert into T (Pluto, Sun, Earth, Mars, Planets) values (null, null, null, null, null);

1 row created.

SQL> update T
  2  set pluto   = case when planets like '%Pluto%' then 'Y' end,
  3      Sun     = case when planets like '%Sun%'   then 'Y' end,
  4      Earth   = case when planets like '%Earth%' then 'Y' end,
  5      Mars    = case when planets like '%Mars%'  then 'Y' end;

3 rows updated.

SQL> select * from T;

PLUTO      SUN        EARTH      MARS       PLANETS
---------- ---------- ---------- ---------- --------------------
           Y          Y          Y          Sun|Earth|Mars
Y                     Y                     Pluto|Earth


3 rows selected.

作为文本表的示例数据和所需结果将有助于解决这个问题。但Planet是一个以管道分隔的字符串,使用您的示例数据,这将完全按照您发布的方式更新列。如果这不是您需要的,请发布不同的示例数据,并尝试更好地解释后面的逻辑。您的答案确实值得称赞,但我是为excel生成而做的。因此,挑战在于打破分隔列,分隔列中的值应与具有相同名称的列匹配。请发布一个示例,说明您需要执行的操作。如果需要更新表格,请显示更新前后的数据;如果需要选择,请发布表格内容和所需结果。就目前而言,很难理解你需要什么我用了同样的东西,但它每次都在更新冥王星,不知道为什么