关闭

mysql中UNION使用的问题 --乐杨俊

标签: mysql中UNION使用的问题 --
886人阅读 评论(0) 收藏 举报
分类:

总结问题:

a表中有x,y,z 3个字段,b表中只有x,y 2个字段,
我用union组合查询结果时应该怎样写?
(select * from a)
union 
(select (*,z) from b)     这样是不可以的

解答:
UNION 用于把来自许多SELECT语句的结果组合到一个结果集合中。(如果你要将多个表的查询结果进行合并输出比如说 群组消息跟个人消息表是分离的但是想一起提取出来并显示的话就可以如此处理。通过MySQLUNION联合查询出来即可;
你要union两个表,就必须满足这两个表的字段名字都是一样的才行。首先,你的B表字段只有x,y两个,(select (*,z) from b) 这样写就已经不对了,因为Z字段不存在,应该是(select (*,'' as z) from b)。
最好就改成:select x,y,z from a union select x,y,'' as z from b ,这样就OK啦!

譬如:
function getdateorders($innid,$begindate,$enddate)
{
    global $_SGLOBAL,$_SC;
    $str_begin=$begindate;
    $str_end=$enddate;
    
    $orderstatus=$_SC["innorder_orderstatus"]["new"];
    $checkinstatus=$_SC["checkin_itemstatus"]["checkedin"];
    
    
    $sql="select min(groupid) as gid, min(id) as id,innid as innid,checkindate as d,roomid as roomid,count(1) as c,case itemstatus when 1 then 'checkedin' when 2 then 'checkedout' end as type  from inn_checkin where (checkindate) between '$begindate' and '$enddate' and innid=$innid
            group by checkindate,roomid,innid
            union
            select '0' as gid,id,innid as innid,arrivedate as d,roomid as roomid,nights as c,'ordered' as type from inn_order where arrivedate>='$begindate' and arrivedate<'$enddate' and orderstatus='$orderstatus'
            order by gid,d";  
 
    //print($sql);        
    $query = $_SGLOBAL['db']->query($sql);
    while($value = $_SGLOBAL['db']->fetch_array($query)) {
        $return_arr[] = $value;
    }
    return $return_arr;
    
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:407073次
    • 积分:7762
    • 等级:
    • 排名:第2805名
    • 原创:355篇
    • 转载:21篇
    • 译文:49篇
    • 评论:30条
    尽请期待
    个人邮箱
    leyangjun518@163.com

    微信号:YangJun_Le
    最新评论