सुप्रभात/दिन/शाम

मैं इस SQL ​​​​क्वेरी के साथ संघर्ष कर रहा हूं जिसमें मुझे उन लोगों को ढूंढना है जो उन लोगों से 10 साल बड़े हैं जिन्हें वे जानते हैं। इसलिए मुझे वुडी और सैंड्रा को ढूंढना है क्योंकि वे दोनों (वेड तेज जानते हैं और सैंड्रा पेसी को भी जानते हैं) किसी ऐसे व्यक्ति को जानते हैं जो उनसे छोटा है। साथ ही हमें यह भी जानना होगा कि यदि एक व्यक्ति दूसरे को जानता है, तो वे एक दूसरे को जानते हैं। इसलिए इसका जवाब है सैंड्रा और वेड

तालिकाओं को अंत पाया जा सकता है

मैं इस समस्या से कैसे निपट सकता हूं इस पर कोई सलाह?

टेबल लोग

| आईडी | नाम | उम्र
+----------+----------+------ | 77 | वेड | 83 | 78 | पेसी | 09 | 79 | सैंड्रा | 27 | 80 | सूरी | 21 | 81 | एंड्रयू | 25 | 82 | जॉयस | 04 | 83 | बेकी | 24 | 84 | केविन | 17

तालिका पता

| id | IDpersonA | IDpersonB
+----+-----------+----------
| 105 |    78     |    79
| 106 |    80     |    79
| 107 |    77     |    80
| 108 |    79     |    77
| 109 |    79     |    78
| 110 |    77     |    79
| 111 |    79     |    77
| 112 |    80     |    78
1
Sokka 3 मई 2020, 14:26

2 जवाब

यह एक ऐसा मामला है जहां आप all का उपयोग कर सकते हैं:

select p.*
from people p
where p.age > all (select p2.age
                   from knows k join
                        people pb
                        on k.IDpersonB = pb.id
                   where k.IDpersonA = p.id
                  );

यह उन लोगों को वापस कर देगा जो किसी को नहीं जानते हैं।

आप सबक्वायरी में एकत्रीकरण का भी उपयोग कर सकते हैं:

select p.*
from people p
where p.age > (select max(p2.age)
               from knows k join
                    people pb
                    on k.IDpersonB = pb.id
               where k.IDpersonA = p.id
              );

यह सूक्ष्म रूप से भिन्न है। इसके लिए आवश्यक है कि कोई व्यक्ति कम से कम एक व्यक्ति को जानता हो।

0
Gordon Linoff 3 मई 2020, 14:53

यहाँ not exists का उपयोग करते हुए दृष्टिकोण पर है:

select p.*
from persons p
where not exists (
    select 1
    from knows k
    inner join persons p1 on p1.id = k.idPersonB
    where p.id = k.idPersonA and p1.age > p.age
)

यदि आप यह सुनिश्चित करना चाहते हैं कि परिणामसेट में शामिल व्यक्ति कम से कम एक अन्य व्यक्ति को जानते हैं:

select p.*
from persons p
where 
    exists (select 1 from knows k where p.id = k.idPersonA)
    and not exists (
        select 1
        from knows k
        inner join persons p1 on p1.id = k.idPersonB
        where p.id = k.idPersonA and p1.age > p.age
    )
0
GMB 3 मई 2020, 15:11
@ सोक्का: (पहली) क्वेरी वुडी, सुसान और सिगोरनी लौटाती है। वुडी और सिगोर्नी उन सभी से बड़े हैं जिन्हें वे जानते हैं, और सुसान किसी को नहीं जानती। दूसरी क्वेरी वुडी और सिगोरनी लौटाती है।
 – 
GMB
3 मई 2020, 15:13