Jump to content

SQL: NOT NULL ieksh SQL


Guest lameris
 Share

Recommended Posts

Man taada probleema sakaraa ar Datu Baazeem. Esmu uztaisiijis Datu vitriinu, kuraa ir iespeejams skatiities datus vairaakaas dimensijaas (griezumos) Bet apskatot visus datus man iznaakushi shmuce, proti, izvads ir shaads (saiisinaats)

1. Jaanis Aadamsons veseliiba_ ministrs Sociaaldemokraati 234Lati

1. Jaanis Aadamsons veseliiba_ ministrs Sociaaldemokraati ----

1. Jaanis Aadamsons veseliiba_ ministrs -------- ----

1. Jaanis Aadamsons veseliiba_ ministrs ---- 234Lati

....

...

2 Einaars Repshe aizsardziibas ministrs Jaunais Laiks 565 lait

2 Einaars Repshe aizsardziibas ministrs Jaunais Laiks ---

2 Einaars Repshe aizsardziibas ministrs ----- ---

2 Einaars Repshe --------- Jaunais Laiks 565 lait

 

Un taatad vajag reaali tikai tos ierakstus kur visi lauki ir pilni, vai tas SQL ir iespeejams uztaisiit. NC zinu ka tu shiis lietas rubii, ljoti luudzu paliidziibu

Link to comment
Share on other sites

Tev ir dimensijas:

> cilvēks

>amats

>partija

Faktu tabula:

> mēneša īres maksa

 

Ja runa būtu par parastu rēlāciju bāzi, es teiktu - neizmanto outer joinus. Šajā gadījumā ir jāatspoguļo visi aizpildītie faktu tabulas raksti ar tiem PIEKĀRTOTAJĀM dimensiju vērtībām. Tu esi atspoguļojis bezmaz vai visas vērtību kombinācijas.

Link to comment
Share on other sites

Guest lameris

Tas ieprieksheejais bija taads iiss piemeers. Dimensiju es neesmu veidojis bet es gribu lai es vareetu redzeet visas veertiibas un tad domaat kaadas dimensijas veidot.

Man ir viena Indeksu tabula kuraa ir saites uz citaam tabulaam. Lai visu vareetu apskatiit esmu izveidojis materializeetu skatu un no taa ieguustu datus tie ir sekojoshi

 

Create Materialized view Operaacija

pctfree 5 pctused 60

storage (initial 50k next 50k)

refresh next sysdate+7

as select  IndexTabula.ID, IndexTabula.BrutoApgroz, IndexTabula.Nodoklji,

Gaters.Nosaukums, Gaters.DibGads, Gaters.VidDarbAlga, Gaters.GadaApgroz,

Laiks.Gads, Laiks.Meenesis, Laiks.Diena,

Transports.FirmasNos, Transports.Kubatuura, Transports.Attaalums, Transports.TranspIzmaksas,

Osta.UzKurieniVediis

FROM  Laiks, Transports, Gaters, Osta, IndexTabula

where  (Gaters.TGateraID=IndexTabula.GateraID) AND

(Laiks.TLaiksID=IndexTabula.LaiksID)AND

(Transports.TTransportsID=IndexTabula.TransportsID)AND

(Osta.TOstaID=IndexTabula.OstaID)



select ID, BrutoApgroz, Nodoklji Nosaukums, DibGads, VidDarbAlga, Gads, Meenesis, Diena, FirmasNos

from Operaacija

group by cube (ID);

Cik saprotu vajag kaut kaadu citaadaaku Where nosaciijumu jebshu arii pie Select vaicaajumu ierakstiiv veel kaadu select, lai nenjem visas rindinjas bet tikai taas kur visi lauki ir aizpildiiti

Link to comment
Share on other sites

Nesaprotu, kādēļ pēdējā selektā ir tas "group by".

 

Ja indeksu tabula ir aizpildīta pareizi, tad materializētā viewa veidošanas selekts ir Ok. Es pieņemu, ka Tu karam gaterim, piemēram, mēneša garumā, katrai dienai esi izveidojis indeksa tabulā vienu rakstu. Tagad ir vērts atlasīt visus gatera X 2004. gada decembra rakstus un pārbaudīt, vai tiešām tie ir 31 un pie tam vajadzīgie 31.

 

Ar to es paredzu, ka ir neveiksmīgi aizpildīta IndexTabula.

 

lai paarbaudiitu lauku uz NOT NULL veertiibu:

...WHERE field_name IS NOT NULL...

 

is null/is not null automātiski uztaisa full scan, tādēļ no šī kritērija liela apjoma tabulās jāvairās kā no uguns. Labāk datu transformācijas brādī NULL vērtības dekodēt par kādām ārpusdomēna vērtībām.

Link to comment
Share on other sites

Guest lameris

Man ir taada logjika: Ir kaada operaacija ar attieciigo ID kuraa ir iekljauts laiks kuraa briidii shii operaacija ir veikta tad no kurienes tiek vesti kokmateriaali (Gatera nosaukums) tad kaada transporta firma un peec tam uz kuru ostu tiek vests. Probleema ir tur ka veidojot

(Gaters.TGateraID=IndexTabula.GateraID) AND

(Laiks.TLaiksID=IndexTabula.LaiksID)AND

(Transports.TTransportsID=IndexTabula.TransportsID)AND

(Osta.TOstaID=IndexTabula.OstaID)

Vinjsh pie kaarto katram operaacija ID atsevishjki vienu tabulu proti

1. Operaacija 1 laiks taads un taads

2. operaacija 1 gaters taads un taads

3 .....

4 operaacija 2 laiks taads un taads

e.t.c.

vajag operaacija1 tikai vinreiz drukaat nevis n-taas

Link to comment
Share on other sites

Tas, ko Tu saki, izskatās ļoti aizdomīgi. Viewa veidošanas selekts, manuprāt, ir pareizs. Ja ir 4 foreign_key lauki, tad ar 4 joiniem, kas savienoti ar AND, panākam, ka šie 4 nosacījumi visiem rakstiem ir vienlaikus spēkā. Tur nav nekādas grupēšanas pa pāriem.

 

Pastāsti, kādu datu bāzi izmanto un ar kādu tūli raksti selektus. (Oracle, SQL+)?

Joprojām iesaku pārbaudīt indeksa tabulas saturu. Otra iespēja ir iepostēt visu saistīto tabulu struktūras (desc tabulas_nosaukums). Mēģināsim izdomāt kopīgiem spēkiem.

Link to comment
Share on other sites

Guest lameris

Izmantojo Oracle un developer tuuli "Toad"

tabulas ir paraadiitas sheit

http://paste.php.lv/1514

ierakstus es domaaju ka nevajdzeetu

bet indeksu tabulas ierakstus es paraadiishu

 

 


BEGIN

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(1, 2, 3, 4, 2, 4593, 230);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(2, 1, 2, 2, 5, 8574, 340); 

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(3, 5, 4, 2, 7, 8937, 360); 

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(4, 2, 2, 3, 6, 1298, 98);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(5, 7, 5, 2, 1, 4034, 230);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(6, 1, 4, 1, 3, 9876, 408);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(7, 3, 1, 5, 4, 7635, 981);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(8, 2, 4, 6, 2, 2567, 226);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(9, 3, 7, 7, 7, 3478, 123);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(10, 9, 3, 2, 5, 3487, 209);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(11, 8, 3, 3, 1, 2327, 160);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(12, 5, 2, 6, 8, 3433, 321);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(13, 8, 1, 7, 8, 2337, 213);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(14, 4, 6, 1, 3, 2327, 160);

INSERT INTO IndexTabula(ID, LaiksID, GateraID, TransportsID, OstaID, BrutoApgroz, Nodoklji)

VALUES(15, 8, 3, 1, 8, 8932, 309);

END;

Link to comment
Share on other sites

Guest lameris

IS NOT NULL probleemu neatrisina


select ID, BrutoApgroz, Nodoklji, Nosaukums, DibGads, VidDarbAlga, UzKurieniVediis

from Operaacija

WHERE (BrutoApgroz IS NOT NULL) or (Nodoklji IS NOT NULL) or 

  (nosaukums IS NOT NULL) or 

  (dibGads IS NOT NULL)or

  (VidDarbAlga IS NOT NULL)and

  (UzKurieniVediis IS NOT NULL)

group by cube (ID, BrutoApgroz, Nodoklji, Nosaukums, DibGads, VidDarbAlga, UzKurieniVediis);



Link to comment
Share on other sites

Par pamatu ņemot Tavus dotos insertus, aizpildu pārējās tabulas. Lūk rakstu skaits tabulās:

SQL>  select 'select count(*) from '||table_name||';' from user_tables;

'SELECTCOUNT(*)FROM'||TABLE_NAME||';' 

--------------------------------------

select count(*) from GATERS;          

select count(*) from INDEXTABULA;     

select count(*) from LAIKS;           

select count(*) from OSTA;            

select count(*) from PRIEKSHNIEKS;    

select count(*) from TRANSPORTS;      

                                     

6 rows selected.                      

                                     

SQL> select count(*) from GATERS;     

                                     

COUNT(*)                             

---------                             

       7                             

                                     

SQL> select count(*) from INDEXTABULA;

                                     

COUNT(*)                             

---------                             

      14                             

                                     

SQL> select count(*) from LAIKS;      

                                     

COUNT(*)                             

---------                             

       8                             

                                     

SQL> select count(*) from OSTA;       

                                     

COUNT(*)                             

---------                             

       9                             

                                     

SQL> select count(*) from PRIEKSHNIEKS

                                     

COUNT(*)                             

---------                             

       1                             

                                     

SQL> select count(*) from TRANSPORTS; 

                                     

COUNT(*)                             

---------                             

       7                             

 

Tagad izpildu maerializētā viewa veidošanas selektu.

SQL> select  IndexTabula.ID, IndexTabula.BrutoApgroz, IndexTabula.Nodoklji,                          

 2     Gaters.Nosaukums, Gaters.DibGads, Gaters.VidDarbAlga, Gaters.GadaApgroz,                     

 3     Laiks.Gads, Laiks.Meenesis, Laiks.Diena,                                                     

 4     Transports.FirmasNos, Transports.Kubatuura, Transports.Attaalums, Transports.TranspIzmaksas, 

 5     Osta.UzKurieniVediis                                                                         

 6  FROM    Laiks, Transports, Gaters, Osta, IndexTabula                                            

 7  where    (Gaters.TGateraID=IndexTabula.GateraID) AND                                            

 8     (Laiks.TLaiksID=IndexTabula.LaiksID)AND                                                      

 9     (Transports.TTransportsID=IndexTabula.TransportsID)AND                                       

10     (Osta.TOstaID=IndexTabula.OstaID)                                                            

11  /                                                                                               



ID BRUTOAPGROZ  NODOKLJI NOSAUKUMS              DIBGADS VIDDARBALGA GADAAPGROZ      GADS  MEENESIS     DIENA FIRMASNOS            KUBATUURA ATTAALUMS TRANSPIZMAKSAS UZKURIENIVEDIIS

--- ----------- --------- -------------------- --------- ----------- ---------- --------- --------- --------- -------------------- --------- --------- -------------- ---------------

 1        4593       230 gaters # 3                1999         300     100000      2000         2        12 firma 4                      4        19             17 13             

 2        8574       340 gaters # 2                1999         300     100000      1999         1        10 firma 2                      2        13             19 16             

 3        8937       360 gaters # 4                1999         300     100000      2003         5        18 firma 2                      2        13             19 18             

 4        1298        98 gaters # 2                1999         300     100000      2000         2        12 firma 3                      3        16             18 17             

 5        4034       230 gaters # 5                1999         300     100000      2005         7        22 firma 2                      2        13             19 12             

 6        9876       408 gaters # 4                1999         300     100000      1999         1        10 firma 1                      1        10             20 14             

 7        7635       981 gaters # 1                1999         300     100000      2001         3        14 firma 5                      5        22             16 15             

 8        2567       226 gaters # 4                1999         300     100000      2000         2        12 firma 6                      6        25             15 13             

 9        3478       123 gaters # 7                1999         300     100000      2001         3        14 firma 7                      7        28             14 18             

11        2327       160 gaters # 3                1999         300     100000      2006         8        24 firma 3                      3        16             18 12             

12        3433       321 gaters # 2                1999         300     100000      2003         5        18 firma 6                      6        25             15 19             

13        2337       213 gaters # 1                1999         300     100000      2006         8        24 firma 7                      7        28             14 19             

14        2327       160 gaters # 6                1999         300     100000      2002         4        16 firma 1                      1        10             20 14             

15        8932       309 gaters # 3                1999         300     100000      2006         8        24 firma 1                      1        10             20 19             



14 rows selected.

 

Acīmredzami, viss ir Ok. Katram IndexTabula rakstam (no 14) atbilst tieši un precīzi viens raksts. Nekur nekas pa pāriem netiek likts.

 

Lūdzu padalies ar selectu, ar kuru Tu velc ārā datus no tā skatījuma. Manējais(Tavējais) selekts strādā labi.

 

P.S. Lūdzu "<code>" vietā raksti "

"
Link to comment
Share on other sites

Guest lameris

bljaaviens tev straadaa! Man skjiet ka kljuuda ir index tabulas veidoshanaa

Vai tu domaa to select kas njem datus aaraa no view tad tas ir taads

 

bet nekaadas kljuudas nav jo rakstot kaut vai select * from operaacija

kur operaacija ir materializeetaa skata nosaukums man izdrukaa paris simtus ierakstu kuru ir vienaadi

Link to comment
Share on other sites

Guest lameris

Paklausies, bet kaa var saglabaat materializeeto skatu. Man arii ar select straadaa bet ar

 

Create Materialized view Operaacija

pctfree 5 pctused 60

storage (initial 50k next 50k)

refresh next sysdate+7

as select 

...

aiziet dibenaa

Link to comment
Share on other sites

bet nekaadas kljuudas nav jo rakstot kaut vai select * from operaacija  

kur operaacija ir materializeetaa skata nosaukums man izdrukaa paris simtus  ierakstu  kuru ir vienaadi

Šis apgalvojums jau sāk norādīt uz problēmas cēloni. Es nekad ar snapshotiem neesmu darbojies, bet velk uz to, ka Tu insert komandu esi izpildījis vairākas reizes, par ko liecina kaudze ar vienādiem rakstiem. Eksperimenta tīrībai var nodropot to materializēto viewu un pēc tam izveidot par jaunu un uzreiz ieselektēt visus rakstus.

 

Ar tiem selektiem ir tā: ko tabulā ierakstīji, to arī nolasīsi. Toļko lovkostj ruk i ņikakavo obmana.

Link to comment
Share on other sites

Guest lameris

Varam sleegt sho topiku Paldies par paliidziibu Es nodropoju visas tabulas un tad visu paartaisiiju un tagad viss straadaa

Mistika, bet iespeejams neuzmaniiba!

 

Ljoti liels paldies

Link to comment
Share on other sites

Paklausies, bet kaa var saglabaat materializeeto skatu. Man arii ar select straadaa bet ar  

 

Create Materialized view Operaacija

pctfree 5 pctused 60

storage (initial 50k next 50k)

refresh next sysdate+7

as select 

...

aiziet dibenaa

 

Kā jau minēju, nekad neesmu nodarbojies ar snapshotiem. ;)

Pa rokai man mētājas kaut kāds 8i *,pdf, kur pie "cretate materialized view" rakstīts ir šis:

Varam sleegt sho topiku Paldies par paliidziibu Es nodropoju visas tabulas un tad visu paartaisiiju un tagad viss straadaa

Mistika, bet iespeejams neuzmaniiba!

 

Ljoti liels paldies

 

Ņem par labu. Topiku atstāšu atvērtu, jo prognozēju, ka pēc kārtējā materializētā viewa refreša Tu atkal vēlēsies par šo jautājumu parunāt. Cerams, ka man nav taisnība. 8)

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...