Postgresql: क्वेरी दो तालिकाओं के साथ एक ही स्तंभ में नाम और दिखाने के परिणाम पक्ष द्वारा आदेश दिया अपने स्तंभ नाम हो, जो दोनों तालिकाओं में

0

सवाल

दो तालिकाओं (table1, table2) के साथ एक ही स्तंभ नाम (पीढ़ी, माता-पिता), वांछित उत्पादन के लिए किया जाएगा के संयोजन के सभी स्तंभों के दोनों तालिकाओं. जिससे पंक्तियों के table2 में शामिल होने चाहिए table1 इतना है कि पंक्तियों के table2 मिलान कर रहे हैं उन लोगों के table1 पर पीढ़ी स्तंभ । माता पिता की संख्या का आदेश दिया जाना चाहिए आरोही के लिए प्रविष्टियों में table1 के रूप में अच्छी तरह के रूप में table2. पंक्तियों की संख्या क्वेरी के परिणाम के बराबर होना चाहिए की उन के table1.

दिए गए निम्न तालिकाओं
table1:

| generation | parent |
|:----------:|:------:|
| 0          | 1      |
| 0          | 2      |
| 0          | 3      |
| 1          | 3      |
| 1          | 2      |
| 1          | 1      |
| 2          | 2      |
| 2          | 1      |
| 2          | 3      |

table2:

| generation | parent |
|:----------:|:------:|
| 1          | 3      |
| 1          | 1      |
| 1          | 3      |
| 2          | 1      |
| 2          | 2      |
| 2          | 3      |

निम्नलिखित प्रश्नों लगा रहे हैं बनाने के लिए और populating दो नमूना तालिकाओं के ऊपर के रूप में दिखाया:

create table table1(generation integer, parent integer);
insert into table1 (generation, parent) values(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(2,2),(2,1),(2,3);
create table table2(generation integer, parent integer);
insert into table2 (generation, parent) values(1,3),(1,1),(1,3),(2,1),(2,2),(2,3);

कल्पना की क्वेरी के लिए नेतृत्व चाहिए के बाद वांछित परिणाम:

| table1_generation | table1_parent | table2_generation | table2_parent |
|:-----------------:|:-------------:|:-----------------:|:-------------:|
| 0                 | 1             |                   |               |
| 0                 | 2             |                   |               |
| 0                 | 3             |                   |               |
| 1                 | 1             | 1                 | 1             |
| 1                 | 2             | 1                 | 3             |
| 1                 | 3             | 1                 | 3             |
| 2                 | 1             | 2                 | 1             |
| 2                 | 2             | 2                 | 2             |
| 2                 | 3             | 2                 | 3             |

वर्तमान क्वेरी लग रहा है के रूप में इस प्रकार है:

with 
  p as (
    select 
      generation,
      parent 
    from 
      table1
    order by
      generation,
      parent
  ), o as(
    select
      generation,
      parent 
    from 
      table2 
    order by
      generation,
      parent
  )
select
  p.generation as table1_generation,
  p.parent as table1_parent,
  o.generation as table2_generation,
  o.parent as table2_parent
from
  p
left join o on 
  o.generation=p.generation;

की ओर जाता है जो करने के लिए निम्नलिखित परिणाम:

| table1_generation | table1_parent | table2_generation | table2_parent |
|:-----------------:|:-------------:|:-----------------:|:-------------:|
| 0                 | 1             |                   |               |
| 0                 | 2             |                   |               |
| 0                 | 3             |                   |               |
| 1                 | 1             | 1                 | 1             |
| 1                 | 1             | 1                 | 3             |
| 1                 | 1             | 1                 | 3             |
| 1                 | 2             | 1                 | 1             |
| 1                 | 2             | 1                 | 3             |
| 1                 | 2             | 1                 | 3             |
| 1                 | 3             | 1                 | 1             |
| 1                 | 3             | 1                 | 3             |
| 1                 | 3             | 1                 | 3             |
| 2                 | 1             | 2                 | 1             |
| 2                 | 1             | 2                 | 2             |
| 2                 | 1             | 2                 | 3             |
| 2                 | 2             | 2                 | 1             |
| 2                 | 2             | 2                 | 2             |
| 2                 | 2             | 2                 | 3             |
| 2                 | 3             | 2                 | 1             |
| 2                 | 3             | 2                 | 2             |
| 2                 | 3             | 2                 | 3             |

इस लिंक करने के लिए नेतृत्व निष्कर्ष है कि, किसी भी शामिल होने के आदेश हो सकता है नहीं क्या आवश्यक है यहाँ ... लेकिन संघ करता है केवल संलग्न पंक्तियाँ... मेरे लिए तो यह बिल्कुल स्पष्ट नहीं है, कैसे वांछित परिणाम हासिल किया जा सकता हे.हे
किसी भी मदद की बहुत सराहना की है । अग्रिम में धन्यवाद!

join postgresql
2021-11-23 22:52:10
1

सबसे अच्छा जवाब

1

मुख्य गलतफहमी इस सवाल पर से उठी तथ्य यह है कि आप उल्लेख किया है शामिल है, जो एक बहुत ठीक गणितीय परिभाषित अवधारणा के आधार पर कार्तीय उत्पाद और लागू किया जा सकता करने के लिए किसी भी दो सेट. इसलिए वर्तमान आउटपुट स्पष्ट है । लेकिन आप के रूप में शीर्षक में लिखा है, आप चाहते हैं डाल करने के लिए दो तालिकाओं के पक्ष की ओर से. आप लाभ लेने के तथ्य यह है कि वे एक ही पंक्तियों की संख्या (ट्रिपल).

इस चयन देता आउटपुट आप चाहते हैं.
मैं कृत्रिम शामिल होने कॉलम, row_number() OVER (order by generation, parent) as rnumहै , और चले गए दूसरे टेबल का उपयोग कर के अलावा तीन. मुझे आशा है कि इस मदद करता है आप:

with 
  p as (
    select 
      row_number() OVER (order by generation, parent) as rnum,
      generation,
      parent 
    from 
      table1
    order by
      generation,
      parent
  ), o as(
    select
      row_number() OVER (order by generation, parent) as rnum,
      generation,
      parent 
    from 
      table2 
    order by
      generation,
      parent
  )
select
  p.generation as table1_generation,
  p.parent as table1_parent,
  o.generation as table2_generation,
  o.parent as table2_parent
from
  p
left join o on 
  o.rnum+3=p.rnum
order by 1,2,3,4;

आउटपुट:

table1_generation table1_parent table2_generation table2_parent
0 1 (अशक्त) (अशक्त)
0 2 (अशक्त) (अशक्त)
0 3 (अशक्त) (अशक्त)
1 1 1 1
1 2 1 3
1 3 1 3
2 1 2 1
2 2 2 2
2 3 2 3
2021-11-25 21:38:39

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में