-1

假设我有 2 个表(实际上这个命令中有更多表,但只有那些会影响问题)。

表 A 具有唯一帐户,表 C 具有唯一材料。

现在假设 ID 为 11 的唯一帐户可以有很少的唯一材料(例如:10、18、19、24)。

材料可以是相同类型或不同类型(例如:10 - type2, 18 - type2, 19 type1, 24 type3)并且它们有编号(例如:10 - A24, 18 - A25, 19 - A24, 24 - B55) 和许多其他值(但例如 1 就足够了)。

每个材料在专用列中都有帐户 ID。

现在我需要根据输入字符串标准将一些值选择到 DataTable 中:

String1 = Afst; //some value from tableA
//...
String2 = Ctype; // SomeType of Material from table C
String3 = dn; // number of Material from table C

Afst (tableA) |...| dn (tableC 的 Ctype 数) | dn2(Type2的表C数)

其中 dn2 已指定类型。

这里的问题是,即使此帐户不存在 Type2,我也需要使用 Ctype 选择所有材料。

例如,当 Ctype 和 Type2 都存在于以下位置时,这将给出所有结果:

("SELECT a.id, a.Afst, c.dn, d.dn as 'dn2' FROM sometableA a INNER JOIN sometableC c ON a.id=c.idofa INNER JOIN sometableC d ON a.id=d.idofa WHERE a.Afst like '%" + String1 + "%' and c.MaterialType='" + String2 + "' and c.dn like '%" + String3 + "%' and d.MaterialType='2'");

注意:我不允许以任何方式更改数据库表,因此我不能将 Material 表按类型拆分为表。

这也应该在单个 TSQL 命令中。

4

1 回答 1

1

我不确定是否理解正确,也许第一次加入必须是inner

SELECT a.id, a.Afst, c.dn, d.dn as 'dn2'
  FROM sometableA a
  LEFT JOIN sometableC c ON a.id=c.idofa  and c.MaterialType = 'String2' and c.dn like '%String3%'
  LEFT JOIN sometableC d ON a.id=d.idofa  and d.MaterialType= '2'
  WHERE a.Afst like '%String1%'
于 2013-06-01T13:16:17.267 回答