mysql多条语句union_Mysql同时执⾏多个select语句——
union
前⾔
今天⼩编在改bug的时候遇到⼀个既简单⼜让⼈头疼的问题,由于底层封装的执⾏sql语句的⽅法中没有合适我的,所以我只能在我的D层动⼿脚了……
经验
下⾯来说说我今天的情况:
我们新建⼀个抽奖活动的时候需要绑定奖品,在绑定的时候肯定要去奖品池⾥查看⼀下我们填的这个奖品ID是否存在,如果存在就可以添加,不存在的话需要先去添加奖品,再进⾏绑定。由于我的奖品信息是可以动态添加多条的,所以我在进⾏查询的时候,传⼊的是⼀个奖品ID的数组,然后去依次的查询。之前使⽤的是⼀个for循环的语句,直接调的底层⽅法去查询,但是这个底层⽅法并不是我们想要的样⼦,是当这个查询语句没问题的时候就会返回true,只有发⽣异常的时候才会返回false,所以明显跟我们的需求不对应。所以我只能换了⼀种⽅法,动态拼接select语句……
分享
思路到了这就开始执⾏了,但是语句拼好了,那么当多个奖品的时候,我要怎么同时执⾏这些select语句呢?后来查到了可以使⽤union关键字来进⾏联合查询,下⾯我就开始给⼤家分享⼀下……
1、union:联合的意思,即把两次或多次查询结果合并起来。
2、 要求:两次查询的列数必须⼀致
3、 可以来⾃多张表的数据:多次sql语句取出的列名可以不⼀致,此时以第⼀个sql语句的列名为准
4、union会去掉重复的⾏,如果想保留重复的⾏,需要使⽤union all
5、如果⼦句中有order by,limit,需⽤括号()包起来。推荐放到所有⼦句之后,即对最终合并的结果来排序或筛选
例:(select * from a order by id) union (select * from b order id);
6、在⼦句中,order by 需要配合limit使⽤才有意义。如果不配合limit使⽤,会被语法分析器优化分析时去除
7、如果查询两个表中数据,两个表的字段是不⼀样的,
table1: (id,createDate,lastUpdateDate,desc,num,hashCode),
table2: (id,createDate,lastUpdateDate,desc)
如果现在使⽤: select * from table1 UNION ALL select * from table2 则是不会成功的, 数据库为报:
Error The used SELECT statements have a different number of columns
这是提⽰查询的两张表的字段不统⼀,如果table1⽐table2的字段内容多,可以使⽤空字符串来代替:
select id,createDate,lastUpdateDate,desc,num,hashCode from table1 UNION ALL select
id,createDate,lastUpdateDate,desc,'','' from table2
如果⾥⾯有不想要的,千万要记住前⾯查询内容要和后⾯查询内容的字段个数要⼀样,前⾯你查询4个,后⾯也要相应的放4个,这样就不会提⽰参数数量不同的错误了。
8、从效率上说,UNION ALL 要⽐UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使⽤UNION ALL。
下⾯⼩编放上⾃⼰项⽬中的代码,以便⼤家借鉴:
public static bool Selectrewardinfo(string[] RewardIDstr1)
{
StringBuilder sbSql1 = new StringBuilder();
for (int i = 0; i < RewardIDstr1.Length - 1; i++)
{
sbSql1.Append("SELECT RewardID FROM ta_reward_info WHERE RewardID = ");
sbSql1.Append("'" + RewardIDstr1[i] + "'union");
}
sbSql1.Append(" SELECT RewardID FROM ta_reward_info WHERE RewardID = ");
sbSql1.Append("'" + RewardIDstr1[RewardIDstr1.Length - 1] + "'");
string sql = sbSql1.ToString();
List List = GetList1(sql);
bool flag;
if (List.Count < RewardIDstr1.Length)
{
flag = false;
}
else
{sql中union多表合并
flag = true;
}
return flag;
}
总结
经历了这么多,⼩编总结出来的只有⼀句话,那就是——⽅法总⽐问题多!没有我们解决不了的问题!加油~~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论