使用不同的where子句组合两个mysql查询

使用不同的where子句组合两个mysql查询,mysql,subquery,union,Mysql,Subquery,Union,我有多个地点的结果。位置存储在一个表中,结果存储在另一个表中。我用荷兰的一个位置查询每个结果。 我将这些结果按省份分组。之后,我使用Lattude和经度在谷歌地图上标记每个省份的结果 查询: SELECT loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats FROM `vj_res

我有多个地点的结果。位置存储在一个表中,结果存储在另一个表中。我用荷兰的一个位置查询每个结果。 我将这些结果按省份分组。之后,我使用Lattude和经度在谷歌地图上标记每个省份的结果

查询:

SELECT   loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats 
FROM     `vj_results_1618048029` AS res, vj_location AS loc 
WHERE    res.time > '1324635105' AND res.time < '1327313506' AND res.search_id='8070' AND (loc.lat != '0' AND loc.long != '0') AND res.location_id != '' AND res.location_id = loc.location_id  AND loc.land = 'Nederland'
GROUP BY loc.provincie 
ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
问题是我收到的经度是组中第一个结果的最窄位置。对弗莱沃兰来说,这是一座城市“莱利斯塔德”,对泽兰来说,这是一座城镇“托伦”。在《弗里斯兰》(friesland)一书中,这是准确的,因为第一个结果没有指定一个城镇,只是指定了一个省

要获得正确的纬度和经度,我将查询如下内容:

SELECT   location_id as loc_id, loc.lat, loc.long, loc.land, loc.provincie, loc.gemeente, loc.plaats 
FROM     vj_location AS loc 
WHERE    (loc.lat != '0' AND loc.long != '0') AND loc.land = 'Nederland' AND loc.gemeente = '' AND loc. plaats = ''
GROUP BY loc.provincie 
ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
Wich会给我这些结果:

loc_id  lat         long        land        provincie       gemeente    plaats
19      52.132633   5.291266    Nederland            
697     52.9476012  6.6230586   Nederland   Drenthe      
1257    52.5279781  5.5953508   Nederland   Flevoland        
401     53.1641642  5.7817542   Nederland   Friesland        
235     52.045155   5.8718234   Nederland   Gelderland       
2732    53.2887213  6.7060867   Nederland   Groningen        
860     51.4427238  6.0608726   Nederland   Limburg      
255     51.4826537  5.2321687   Nederland   Noord-Brabant        
407     52.5205869  4.788474    Nederland   Noord-Holland        
884     52.4387814  6.5016411   Nederland   Overijssel       
3796    52.119508   5.1943653   Nederland   Utrecht      
3692    51.325362   3.6640464   Nederland   Zeeland      
705     52.0207975  4.4937836   Nederland   Zuid-Holland
我需要将它们组合到一个查询中,第一个查询的结果和组以及第二个查询的晶格度和经度。有人能帮忙吗

提前谢谢

编辑: 我尝试使用联合,但它返回一个错误: 1222-使用的SELECT语句具有不同的列数

我尝试使用子查询,但它会减慢查询速度。。现在运行查询需要很长时间

第二次编辑:多亏了@johntetwoo,我编辑了联合查询,使其正常工作。 我不得不删除order by,因为我的mysql不喜欢它,不需要它,这是为了调试时的可读性。 我还在第二个查询中更改了select的顺序,以便将零放在右边的列中

新查询

现在效果很好,谢谢!
我只是想知道它是否可以合并成一行。我现在有一行有结果编号和省份,另一行有相同的省份和正确的经度和纬度。如果这些可以结合起来,那将是完全完美的

将字段aantal添加到第二个查询并重新合并

将字段aantal添加到第二个查询并重新合并

因为第二个查询没有aantal列,所以将其删除

试试这个:

SELECT *
FROM
    (SELECT   loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats 
    FROM     `vj_results_1618048029` AS res, vj_location AS loc 
    WHERE    res.time > '1324635105' AND res.time < '1327313506' AND res.search_id='8070' AND (loc.lat != '0' AND loc.long != '0') AND res.location_id != '' AND res.location_id = loc.location_id  AND loc.land = 'Nederland'
    GROUP BY loc.provincie 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
           UNION
    SELECT   location_id as loc_id, loc.lat, loc.long, loc.land, loc.provincie, loc.gemeente, loc.plaats , 0 as aantal
    FROM     vj_location AS loc 
    WHERE    (loc.lat != '0' AND loc.long != '0') AND loc.land = 'Nederland' AND loc.gemeente = '' AND loc. plaats = ''
    GROUP BY loc.provincie 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC) as iTable

这是因为第二个查询没有aantal列

试试这个:

SELECT *
FROM
    (SELECT   loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats 
    FROM     `vj_results_1618048029` AS res, vj_location AS loc 
    WHERE    res.time > '1324635105' AND res.time < '1327313506' AND res.search_id='8070' AND (loc.lat != '0' AND loc.long != '0') AND res.location_id != '' AND res.location_id = loc.location_id  AND loc.land = 'Nederland'
    GROUP BY loc.provincie 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
           UNION
    SELECT   location_id as loc_id, loc.lat, loc.long, loc.land, loc.provincie, loc.gemeente, loc.plaats , 0 as aantal
    FROM     vj_location AS loc 
    WHERE    (loc.lat != '0' AND loc.long != '0') AND loc.land = 'Nederland' AND loc.gemeente = '' AND loc. plaats = ''
    GROUP BY loc.provincie 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC) as iTable

现在效果很好,谢谢!我只是想知道它是否可以合并成一行。我现在有一行有结果编号和省份,另一行有相同的省份和正确的经度和纬度。如果这些可以结合起来,那将是完全完美的!现在效果很好,谢谢!我只是想知道它是否可以合并成一行。我现在有一行有结果编号和省份,另一行有相同的省份和正确的经度和纬度。如果这些可以结合起来,那将是完全完美的!
SELECT *
FROM
    (SELECT   loc.location_id as loc_id, loc.lat, loc.long, count(res.unique_id) as aantal, loc.land, loc.provincie, loc.gemeente, loc.plaats 
    FROM     `vj_results_1618048029` AS res, vj_location AS loc 
    WHERE    res.time > '1324635105' AND res.time < '1327313506' AND res.search_id='8070' AND (loc.lat != '0' AND loc.long != '0') AND res.location_id != '' AND res.location_id = loc.location_id  AND loc.land = 'Nederland'
    GROUP BY loc.provincie 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC
           UNION
    SELECT   location_id as loc_id, loc.lat, loc.long, loc.land, loc.provincie, loc.gemeente, loc.plaats , 0 as aantal
    FROM     vj_location AS loc 
    WHERE    (loc.lat != '0' AND loc.long != '0') AND loc.land = 'Nederland' AND loc.gemeente = '' AND loc. plaats = ''
    GROUP BY loc.provincie 
    ORDER BY loc.land, loc.provincie, loc.gemeente, loc.plaats DESC) as iTable