日期:2014-05-18  浏览次数:20685 次

求一个算法,动态的拼sql中的join表
有一个List<String>,每个元素是一个表名(可以保证没有重复值)
我想根据List的个数(count),动态的拼sql 语句中的from部分,
例如:
(其中A,B,C。。。就是List中的表名,id是一个固定的字段名,保证每个表都存在这个域)
-----------------------
count=1
↓↓↓
from A

-----------------------
count=2
↓↓↓
from A left join B on A.id = B.id

-----------------------
count=3
↓↓↓
from (A left join B on A.id = B.id) left join C on B.id = C.id

------------------------
count=4
↓↓↓
from ((A left join B on A.id = B.id) left join C on B.id = C.id) left join on D on C.id=D.id

count=5
.....


------解决方案--------------------
直接left join就行拉 那个括号是没作用的,放进去干嘛??
ABC 可以用ASCII码得到,那问题就解决了。
------解决方案--------------------
[Code=C#]
List<string> list = new List<string>();
list.Add("table1");
list.Add("table2");
list.Add("table3");
list.Add("table4");
list.Add("table5");
list.Add("table6");
StringBuilder sbQuery = new StringBuilder();
for (int i = 0; i < list.Count - 1; i++)
{
if (i == 0)
{
sbQuery.Append(string.Format(" from {0} left join {1} on {0}.id = {1}.id", list[i], list[i+1]));
}
else
{
sbQuery.Append(string.Format(" left join {1} on {0}.id = {1}.id", list[i], list[i+1]));
}
}
Console.Write(sbQuery.ToString());
[/Code=C#]