表cl 为特种车辆信息数据表
表violate 为车辆违法数据表
表cl的结构如下:
车牌号码(cphm)  车辆类型(cllx) 车主姓名(czxm)
……表violate的结构如下:(违法一次一条记录)
车牌号码(cphm) 车辆类型(pzlx_code)驾驶员姓名(jsyxm)违法时间(wzsj)违法行为(wzdm)
……如何将表cl中“违法三次以上”或 “超速行驶”两次以上 或 违法行为为“酒后驾车”的特种车辆筛选出来。
注:超速行驶的违章代码为1403,酒后驾驶的违章代码为7103,车牌号码相同,但车辆类型有可能不同
你昨天给的代码我执行了,查不到数据,但sql也未提示错误//怎么办呢?附代码:
SELECT cl.* FROM cl
INNER JOIN
(SELECT cphm FROM violate WHeRE wzdm=1403 GROUP BY cphm HAVING COUNT(2)>=2 /*超速二以上*/
UNION
SELECT cphm FROM violate WHERE wzdm=7103 GROUP BY cphm /*洒后架过车的*/
UNION
SELECT cphm FROM violate GROUP BY cphm HAVING COUNT(2)>=3 /*围规三次以上的*/
) x
ON x.cphm=cl.cphm

解决方案 »

  1.   

    我好像没写什么 COUNT(2) 吧, 虽然跟 COUNT(1) 没什么区别,但表示有地方可能你改错了。是好给我个表结构再给几条数据看看。
      

  2.   

    表cl
    结构如下:
    id(主键 int)  cphm(vchar)  pzlx_code(int)  czxm(vchar)  cldw(vchar)
    1001           川A1111      01             小王         公司1
    2351           川A2222      02             小王         公司2
    3333           川A1111      02             小李         公司3       
    ……表violate
    结构如下:
    xuhao( int)    cphm(vchar)  cllx(vchar)  wzdm(vchar)    wzsj(date)
    123              川A1234      01           1403         2005-01-22
    232              川A1235      02           1403         2006-11-11
    321              川A1111      01           7103         2006-11-19      
    353              川A1111      01           7103         2006-11-19    
    353              川A1111      01           2207         2006-11-19    
    ……
      

  3.   

    select c1.* from c1
    where ( exists( SELECT cphm FROM violate where wzdm=1403 and cphm=c1.cphm GROUP BY cphm HAVING COUNT(1)>=2) )
    or ( exists( SELECT cphm FROM violate where wzdm=7103 and cphm=c1.cphm ) )
    or ( exists( SELECT cphm FROM violate where cphm=c1.cphm  GROUP BY cphm HAVING COUNT(1)>=3  ) )