假设我有2个表(事实上这个命令中有更多表,但只有那些会影响问题)。
表A具有唯一帐户,表C具有唯一材料。
现在让我们说ID为11的唯一帐户可以有很少的独特材料(例如:10,18,19,24)。
材料可以是相同类型或不同(例如:10 - 类型2,18 - 类型2,19类型1,24类型3)并且它们具有数字(例如: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(C C的tableC编号)| dn2(Type2的Type2)
其中dn2指定了类型。
这里的问题是我需要选择所有具有Ctype的材料,即使此帐户不存在Type2。
例如,当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命令中。
答案 0 :(得分: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%'