2017-10-06 6 views
-1

Je travaille sur une base de données pour obtenir les mêmes enregistrements de coordonnées. Mais je suis incapable de le faire. Voici la requête que j'ai définie.Requête MySQL pour faire correspondre les mêmes coordonnées

SELECT * FROM `survey` s1, `survey` s2 
    WHERE s1.`latitude` = s2.`latitude` 
     AND s1.`longitude`= s2.`longitude` 

Mais cela ne me donne toujours pas les bonnes données. La requête écrite supérieure est juste pour référence la requête réelle que je travaille est

SELECT sur.id AS 'Survey ID',DATE (sur.capture_date) AS 'Date', 
     sur.sub_division AS 'Sub-Div', sd.name AS 'Sub-Div Name', 
     sd.`circle_name` AS 'Circle Namse',sur.ref_no AS 'Reference Number', 
     sur.customer_id AS 'Customer ID', sur.consumer_name AS 'Consumer Name & Address', 
     sur.sync_date AS 'Sync Date', sur.capture_date AS 'Capture Date', 
     sur.latitude AS Latitude, sur.longitude AS Longitude, 
     sur.near_by_place AS Comments, sur.tarrif AS Tariff, sur.s_load AS 'Sanctioned Load', 
     sur.meter_type AS 'Meter Type (IT)', sur.meter_type_field AS 'Meter Type (Field)', 
     sur.meter_type_desired AS 'Meter Type (As Desired By SDO)', 
     sur.pole_type AS 'Pole Type', sur.meter_location AS 'Meter Location', 
     sur.est_cable_len AS 'Estimated Cable Length', sur.meter_status AS 'Meter Status', 
     sur.running_load_entry_a AS 'Running Load Entry (A)', 
     sur.running_load_entry_b AS 'Running Load Entry (B)', 
     sur.running_load_entry_c AS 'Running Load Entry (C)', 
     MAX(CASE WHEN sn.operator_name LIKE '%Zong%' THEN sn.signal_strength END) AS Zong, 
     MAX(CASE WHEN sn.operator_name LIKE '%Zong%'THEN sn.operator_type END) AS 'Zong Operator Type', 
     MAX(CASE WHEN sn.operator_name LIKE '%Zong%' THEN sn.data_rate/1024 END) AS 'Zong Data Rate (Mbps)', 
     MAX(CASE WHEN sn.operator_name LIKE '%Ufone%'THEN sn.signal_strength END) AS Ufone, 
     MAX(CASE WHEN sn.operator_name LIKE '%Ufone%'THEN sn.operator_type END) AS 'Ufone Operator Type', 
     MAX(CASE WHEN sn.operator_name LIKE '%Ufone%'THEN sn.data_rate/1024 END) AS 'Ufone Data Rate (Mbps)', 
     MAX(CASE WHEN sn.operator_name LIKE '%Telenor%'THEN sn.signal_strength END) AS Telenor, 
     MAX(CASE WHEN sn.operator_name LIKE '%Telenor%'THEN sn.operator_type END) AS 'Telenor Operator Type', 
     MAX(CASE WHEN sn.operator_name LIKE '%Telenor%'THEN sn.data_rate/1024 END) AS 'Telenor Data Rate (Mbps)', 
     MAX(CASE WHEN sn.operator_name LIKE '%Mobilink%'THEN sn.signal_strength END) AS Mobilink, 
     MAX(CASE WHEN sn.operator_name LIKE '%Mobilink%'THEN sn.operator_type END) AS 'Mobilink Operator Type', 
     MAX(CASE WHEN sn.operator_name LIKE '%Mobilink%'THEN sn.data_rate/1024 END) AS 'Mobilink Data Rate (Mbps)' 
    FROM survey sur 
    INNER JOIN survey_networks sn ON sur.id = sn.survey_id 
    INNER JOIN survey_hesco_subdivision sd ON sur.sub_division = sd.sub_div_code 
    WHERE sur.id > 4253 
    GROUP BY sur.id ,sur.sub_division ,sur.ref_no ,sur.customer_id , 
     sur.consumer_name , sur.consumer_address , sur.sync_date , 
     sur.capture_date , sur.source , sur.latitude , sur.longitude , 
     sur.near_by_place , sur.tarrif , sur.s_load , sur.meter_type , 
     sur.meter_type_field , sur.meter_type_desired , sur.pole_type , 
     sur.meter_location , sur.est_cable_len , sur.meter_status , 
     sur.running_load_entry_a , sur.running_load_entry_b , 
     sur.running_load_entry_c 
    ORDER BY sur.`id` ASC 

Il me donne tous les enregistrements ayant des coordonnées identiques et différents. Je veux juste obtenir tous les enregistrements ayant les mêmes coordonnées.

Toute aide sera grandement appréciée.

+1

S'il vous plaît fixer votre mise en forme, votre requête réelle est illisible –

Répondre

1

Ajouter ci-dessous la requête à votre clause where.J'espère que cela va vous aider. Laissez-moi vous expliquer ci-dessous la requête. La sous-requête recherche la latitude et la longitude si elles sont plusieurs fois.

and (select case when COUNT(*) > 1 then true else false end 
     from survey s2 
     where sur.latitude = s2.latitude and s2.longitude = sur.longitude 
     and sur.id > 4253 
     GROUP BY s2.id) 
+0

fonctionne comme un charme :) – faisal1208

0

Dans votre deuxième requête, je ne vois aucune condition indiquant que latitude = latitude et longitude = longitude. Vous devez probablement ajouter une condition comme celle-ci dans la clause "ON" de la ou des jointures.

+0

la latitude et la longitude sont dans la même table – faisal1208

0

Contrairement à la première, il n'y a pas d'auto-jointure dans la deuxième requête. S'il vous plaît revisiter une fois de plus.

+0

J'ai ajouté ce 'INNER JOIN enquête s1 SUR sur.latitude = s1.latitude ET sur .longitude = s1.longitude' mais ça me donne tous les records – faisal1208