माइक्रोसॉफ्ट एज़ूर एसक्यूएल का उपयोग करके मेरे पास निम्न चुनिंदा क्वेरी काम कर रही है। मुझे एक अपडेट की आवश्यकता है जहां मैंने स्टॉपकाउंट = 0 के साथ किसी भी रिकॉर्ड के लिए wd.delete_requested = true सेट किया है। तो दूसरे शब्दों में, stop_detail Driver_Wave_Ticket_Table से संबंधित है। मुझे किसी भी वेव टिकट रिकॉर्ड को हटाने के लिए ध्वजांकित करने की आवश्यकता है जिसमें कोई स्टॉप_डिटेल रिकॉर्ड नहीं है।

    SELECT wd.Id,
(SELECT COUNT(*) FROM Stop_Detail sd WHERE sd.wave_ticket_detail_Id = wd.Id) stopsCount
FROM Driver_Wave_Ticket_Detail wd
WHERE  wd.wave_ticket_date = '1901-01-01 00:00:00.000' 
AND wd.delete_requested IS NULL
AND wd.opened_utc IS  NULL
ORDER BY wd.id, stopsCount
1
Joe Ruder 21 अप्रैल 2021, 15:11

2 जवाब

सबसे बढ़िया उत्तर

हम्म । . . मैं सोच रहा हूँ not exists:

update wd
    set delete_requested = 1
    from Driver_Wave_Ticket_Detail wd
    where not exists (select 1
                      from Stop_Detail sd 
                      where sd.wave_ticket_detail_Id = wd.Id
                     ) and
          wd.wave_ticket_date = '1901-01-01 00:00:00.000' and
          wd.delete_requested IS NULL and
          wd.opened_utc IS  NULL;

सामान्य तौर पर, not exists एकत्रीकरण करने और परिणाम 0 की जांच करने की तुलना में तेज़ है।

1
Gordon Linoff 21 अप्रैल 2021, 15:15

सुनिश्चित नहीं है कि यह आपके प्रश्न का उत्तर देता है, लेकिन मैं इस परिदृश्य के लिए केस स्टेटमेंट का उपयोग करने की सोच रहा हूं:

SELECT
a.Id,
a.stopsCount,
CASE WHEN stopsCount = 0 THEN True else FALSE end as delete_flag
FROM
(SELECT wd.Id,
(SELECT COUNT(*) FROM Stop_Detail sd WHERE sd.wave_ticket_detail_Id = wd.Id) stopsCount
FROM Driver_Wave_Ticket_Detail wd
WHERE  wd.wave_ticket_date = '1901-01-01 00:00:00.000' 
AND wd.delete_requested IS NULL
AND wd.opened_utc IS  NULL) a
ORDER BY
a.Id,
a.stopsCount
1
Jiaks 21 अप्रैल 2021, 16:10