在单个记录中获取表的行

时间:2014-07-10 19:15:04

标签: sql

我对编程完全陌生 我有一个表有2列Key(整数)和值(包含逗号分隔的字符串) 例如下面

Table A
  Key   Values
  1     1,2
  2     3,4

我有另一个表,其中包含2列Key(整数)和Value(单整数值)

Table B
  Key   Value
   5     4
   6     7
   7     2
   8     8

我正在尝试从表B中获取其值不在表A中的所有键。  像下面的东西。

Select * from B where Value not in (1,2,3,4)

非常感谢任何建议或帮助。

1 个答案:

答案 0 :(得分:0)

您的tableA格式为非常格式错误。您将数字存储为字符串,而不是本机格式。更糟糕的是,您将列表存储在字符串变量中。 SQL有一个非常有用的存储列表机制。它被称为表。在这种情况下,您需要的特定表结构是联结表。

尽管如此,有时您会遇到这种格式的数据。让我假设这是真的。您可以通过执行以下操作来解决此问题:

select *
from tableb b
where not exists (select 1
                  from tablea a
                  where ',' || a.values || ','  like '%,' || b.value || ',%'
                 );

与使用联结表的版本相比,效率非常低。

此外,这使用||来连接字符串。这因数据库而异。它可能是+。或&,甚至只是concat()功能。