Topic: Užklausa užklausoje?

Sveiki,

Gal kas galite parodyti užklausos užklausoje  formavimo pavyzdį. Mano atveju operuočiau vienoje lentelėje.

Dėkui

Re: Užklausa užklausoje?

subquery

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

3 (edited by @NT 2009-05-22 07:57:36)

Re: Užklausa užklausoje?

SELECT COUNT(mazgo_pav) FROM sujungimai
where mazgo_pav=(SELECT mazgo_pav, Is_A_pav
FROM sujungimai
WHERE sujungimai.tipas_ID = '1'
GROUP BY mazgo_pav, Is_A_pav) GROUP by mazgo_pav

Vykdant tokia užklausą metą klaidą: Operand should contain 1 column(s)

Principe su pirma užklausa gaunu tokia lentelę
SELECT mazgo_pav, Is_A_pav
FROM sujungimai
WHERE sujungimai.tipas_ID = '1'
GROUP BY mazgo_pav, Is_A_pav

| mazgo_pav | Is_A_pav |
--------------------------------
      fff                  1
      fff                  21
      fff                  22
      fff                  23
      sss                 1
      sss                 20
      sss                 22
---------------------------------

Noriu, kad antroje užklausoje suskaičiuotu mazgu pavadinimus, kad gaučiau tokius rezultatus
| mazgo_pav | Is_A_pav |
--------------------------------
        fff                4
        sss               3
---------------------------------

Re: Užklausa užklausoje?

tai čia elementari programine logika. tu darai

where mazgo_pav=(SELECT mazgo_pav, Is_A_pav

selectini 2 laukelius o nori palyginti su vienu. tai kaip manai turėtų tai pavykti?

Su sąlyga, kad šūdo nebus...

Re: Užklausa užklausoje?

Tai matau kad nepavyksta :) Gal ką galite pasiūlyti

Re: Užklausa užklausoje?

tai selectini vieną! nesuprantu kame bėda? pirmoje užklausoje turi išsitraukti tai, ko tau reikia, o su vidine atsirenki pagal ką. o tu vos ne atvriksčiai. ir dar plius už klausa neatitinka lentelės struktūros. iš kur tas tipas_ID?

Su sąlyga, kad šūdo nebus...

Re: Užklausa užklausoje?

Pirma užklausa ištraukia duomenis iš tokios lentelės (bent panašios):
-----------------------------------------------------------
ID | Is_A_pav | I_B_pav | tipas_ID | mazgo_pav |
-----------------------------------------------------------
1 |      1        |      2       |       1     |       fff        |
----------------------------------------------------------- 
4 |      1         |      3       |       1     |      fff        |
----------------------------------------------------------- 
2 |      21       |      4       |       1     |      fff        |
----------------------------------------------------------- 
3 |      22       |      2       |       1     |      fff         |
----------------------------------------------------------- 
4 |      23       |      5       |       1     |      fff         |
----------------------------------------------------------- 
5 |      1         |      6      |       1     |      sss        |
----------------------------------------------------------- 
6 |      20       |      7       |       1     |      sss        |
----------------------------------------------------------- 
7 |      22       |      1      |       1      |      sss        |
----------------------------------------------------------- 
8 |      24       |      1      |       2      |      sss        |
----------------------------------------------------------- 

ir gaunama tokia lentelė

| mazgo_pav | Is_A_pav |
--------------------------------
      fff                  1
      fff                  21
      fff                  22
      fff                  23
      sss                 1
      sss                 20
      sss                 22
---------------------------------

Kuriame nebera neivieno vienodo įrašo(Is_A_pav)  tama pačiame mazge

todėl dar vieną užklausą noriu vykdyti, kad suskaičiuotu kiek konkrečiai yra tame mazge skirtingų įrašų

Re: Užklausa užklausoje?

Ramex wrote:

tai selectini vieną! nesuprantu kame bėda? pirmoje užklausoje turi išsitraukti tai, ko tau reikia, o su vidine atsirenki pagal ką. o tu vos ne atvriksčiai. ir dar plius už klausa neatitinka lentelės struktūros. iš kur tas tipas_ID?

nelabai suprantu kaip padryt tai,
O tipas_ID tai kriterijus atrekantis nereikalingus įrašus

Re: Užklausa užklausoje?

jei aš teisingai supratau tavo norimą gauti rezultatą, tuomet viskas turėtų būti kur kas paprasčiau.

SELECT mazgo_pav, COUNT(mazgo_pav) AS number FROM sujungimai 
where tipas_ID=1
GROUP by mazgo_pav
Su sąlyga, kad šūdo nebus...

10

Re: Užklausa užklausoje?

šia užklausa panaudojus, man neatsifiltruoja vienodi irašai stulpelyje Is_A_pav
-----------------------------------------------------------
ID | Is_A_pav | I_B_pav | tipas_ID | mazgo_pav |
-----------------------------------------------------------
1 |      1        |      2       |       1     |       fff        |
-----------------------------------------------------------
4 |      1         |      3       |       1     |      fff        |

Iš jų turėtų likti tik vienas, nes tame pačiame mazge tas irasas Is_A_pav stulpelio

Re: Užklausa užklausoje?

tai daryk tuomet GROUP BY `Is_A_pav`

Su sąlyga, kad šūdo nebus...

12

Re: Užklausa užklausoje?

Tuomet, bus pasikartojantys įrašai su mazgų pavadinimais :)

Re: Užklausa užklausoje?

o kas tau draudžia pasikartojančių tiesiog neatvaizduoti?

Su sąlyga, kad šūdo nebus...

14

Re: Užklausa užklausoje?

taip ir negerai, nes tuomet netikslus rezultatai gaunasi, gal reiks daryt su php bus lengviau :) gal

15

Re: Užklausa užklausoje?

O jei pirma aš sukuriu virtualia lentele iš tokių duomenų kokių reikia ir poto iš jos vykdau sql užklausa. ar tai pavyktu?

16

Re: Užklausa užklausoje?

Pagaliau pavyko, dėkui už patarimus

SELECT mazgo_pav, Count( Is_A_pav )
FROM (
SELECT mazgo_pav, Is_A_pav
FROM sujungimai
WHERE sujungimai.tipas_ID = '1'
GROUP BY mazgo_pav, Is_A_pav
)vir
GROUP BY mazgo_pav