我需要查询以下问题。表1指定了必填输入字段。我将使用inactive ='No'和mandt field ='yes'
获取字段所以我有4条记录,字段为sev,sev1,cde,frt。
表1:
Fields Inactive mandt_field
sev no yes
sev1 no yes
sev2 yes yes
abd no no
cde no yes
frt no yes
表2的数据与此类似
concession add_fields
TH-123 -sev*yes-sev1*no-sev2*yes
Th-234 -sev*yes-sev1*yes-cde*yes-frt*no
Th-345 -sev*yes-cde*yes-frt*no
TH-456 -cde*no-frt*no
Th-012 -sev*no-sev1*no-cde*no-frt*no
Th-451 -frt*yes
TH-900 -sev2*no
现在我需要在add_fields中没有上述4个字段的记录。 输出应返回以下记录: - TH-123,Th-345,TH-456,Th-451,TH-900。
这4条记录没有我们从上一张表中检索到的所有4个字段(sev,sev1,cde,frt)。
没有。 table1产生的字段可能会有所不同......因为这些是来自表数据...所以我们可能有(sev,sev1,cde,frt ....)
答案 0 :(得分:2)
回答原来的问题
SELECT DISTINCT concession
FROM Table2
INNER JOIN Table1 ON Table2.add_fields NOT LIKE '%-' + Table1.Fields + '*%'
WHERE Inactive='no' AND mandt_field='yes'
继续评论后,add_fields
似乎包含一个项目列表。这反过来包含成对的代码和是/否值。我建议重构你的table2如下。这将把它放入first normal form。
将其置于第一范式将进行更新,并且搜索更容易,而无需每次都解析每个字符串以将其分解为其组成项。它还允许您对数据应用完整性约束。
concession code YesNo
----------------------------
TH-123 sev yes
TH-123 sev1 no
TH-123 sev2 yes
Th-234 sev yes
....
答案 1 :(得分:0)
简短回答:可能你不想尝试。
相反,从表2创建第三个表,其中包含相同的数据,但是您可以使用的形式。这意味着将字段add_fields
拆分为列,以便您可以对表Table1
使用联接
答案很长:SQL正在巡视完成,因此您可以在其中编写任何程序(mandelbrot set in T-SQL)。但这很快变得复杂,所以你真的不想这样做。