„Union“ užklausos naudojimas norint sujungti kelių užklausų rezultatus į vieną

„Union“ užklausos naudojimas norint sujungti kelių užklausų rezultatus į vieną

Pastaba:  Norėtume jums kuo greičiau pateikti naujausią žinyno turinį jūsų kalba. Šis puslapis išverstas automatiškai, todėl gali būti gramatikos klaidų ar netikslumų. Mūsų tikslas – padaryti, kad šis turinys būtų jums naudingas. Gal galite šio puslapio apačioje mums pranešti, ar informacija buvo naudinga? Čia yra straipsnis anglų kalba , kuriuo galite pasinaudoti kaip patogia nuoroda.

Kartais galite sąrašo įrašus iš vienos lentelės arba užklausos su vienos ar daugiau lentelių formos vieno dokumentų - rinkinio sąrašą su visus įrašus iš dviejų ar daugiau lentelių. Tai "union" užklausą programoje "Access" paskirtį.

Norėdami efektyviai suprasti "union" užklausos, pirmiausia turėtumėte susipažinę su kurti pagrindinės išrinkimo užklausų programoje "Access". Norėdami sužinoti daugiau apie išrinkimo užklausų kūrimą, peržiūrėkite sukurti paprastą išrinkimo užklausą.

Pastaba: Šio straipsnio turinys skirtas naudoti su prieigos kompiuterio duomenų bazės. Negalite kurti ar naudoti "union" užklausos prieigos žiniatinklio duomenų bazėse arba prieigos žiniatinklio taikomosios programos.

Išnagrinėkite darbo "union" užklausos pavyzdys

Jei sukūrėte niekada "union" užklausos prieš, gali būti naudingi jį į pirmąjį tyrimą darbo pavyzdys Northwind prieigos šablone. Galite ieškoti Northwind pavyzdys šabloną gauti Access pradžios puslapis, spustelėdami failas > naujas arba jūs galite tiesiogiai atsisiųsti kopiją iš šios vietos: Northwind šablono pavyzdys.

Kai "Access" atidaro duomenų bazės Northwind, atmesti prisijungimo dialogo forma, kurią pirmą kartą ir taip išplėsti naršymo sritį. Spustelėkite naršymo srities viršuje ir pasirinkite Objekto tipą , galite tvarkyti visus duomenų bazės objektus pagal jų tipą. Be to, išplėskite užklausų grupės ir matysite vadinamas Produkto operacijosužklausos.

"Union" užklausos nesunku atskirti nuo kitų objektų, užklausos, nes jie turi specialią piktogramą, panašus į dvi tarpusavyje susijusių apskritimus, reiškiantis united rinkinį iš dviejų rinkinių:

Piktogramos ekrano nuotrauka sujungimo užklausą programoje "Access".

Skirtingai nei įprasta pasirinkti ir veiksmo užklausų, lentelių nėra susiję "union" užklausoje, tai reiškia, kad pasiekti kurti arba redaguoti "union" užklausos negalima naudoti grafinių užklausų dizaino įrankis. Jums tai patirti atidarius "union" užklausą iš naršymo srities; Programa Access atidaro ir parodytumėte rezultatus duomenų lapo rodinyje. Skirtuko Pagrindinis grupėje Rodiniai komandos, pastebėsite, kad Dizaino rodinyje negalima naudoti, kai dirbate su "union" užklausos. Galite tik perjungti Duomenų lapo rodinyje ir SQL rodinys dirbant su "union" užklausos.

Norėdami tęsti savo tyrimą šiame pavyzdyje sujungimo užklausą, spustelėkite Pagrindinis > Rodiniai > SQL rodinys SQL sintaksė, kuris apibrėžia jį peržiūrėti. Šioje iliustracijoje įtraukėme keletas papildomų tarpų SQL, kad galėtumėte lengvai matyti įvairių dalių, kurie sudaro "union" užklausą.

Vaizdo pavyzdys Northwind pavyzdys prieigos šabloną sujungimo užklausą kaip SQL rodinį.

Leiskite tyrimo šio sujungimo užklausą iš išsami informacija apie duomenų bazės Northwind SQL sintaksė:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Iš esmės du išrinkimo užklausų yra pirmą ir trečią dalis šį SQL sakinį. Šie užklausoms gauti dviem skirtingais įrašų; vienas iš lentelės Produkto užsakymai ir vieną iš Produktų pirkimo lentelės.

Šį SQL sakinį antra dalis yra Sąjungos raktažodžių, kurie nurodo programai Access, ši užklausa bus sujungti abu šie įrašai.

Paskutinėje dalyje šį SQL sakinį nustato sujungtą įrašų rikiavimas naudojant Rūšiuoti pagal patvirtinimas. Šiame pavyzdyje prieigos tvarką visus įrašus iš lauko užsakymo data mažėjimo tvarka.

Pastaba: "Union" užklausos visada yra tik skaityti, programoje "Access"; negalite pakeisti jokių reikšmės duomenų lapo rodinyje.

Sukurti "union" užklausos kūrimas ir derinant išrinkimo užklausa

Nors tiesiogiai rašyti SQL sintaksė SQL rodinyje, galite lengviau kurti dalys su išrinkimo užklausų, galite sukurti "union" užklausą. Tada galite nukopijuoti ir įklijuoti sujungtą "union" užklausos SQL dalis.

Jei norite praleisti skaitymo veiksmus ir vietoj jo žiūrėti pavyzdį, ieškokite kitame skyriuje, žiūrėti "union" užklausos kūrimo pavyzdys.

  1. Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos dizainas.

  2. Dialogo lange Lentelės rodymas dukart spustelėkite lentelę, kurioje yra norimi įtraukti laukai. Lentelė įtraukiama į užklausos dizaino langą.

  3. Uždarykite dialogo langą Lentelės rodymas.

  4. Užklausos kūrimo lange, dukart spustelėkite kiekvieno lauko, kurį norite įtraukti. Kaip pasirenkate laukus, įsitikinkite, kad, galite įtraukti tiek pat laukų, tokia pačia tvarka, kai papildote išrinkimo užklausų. Atkreipti dėmesį į duomenų tipų laukus, ir įsitikinkite, kad jie suderinami duomenų tipai su laukais tos pačios padėties kitų užklausų, kuriuos jungiate. Pavyzdžiui, jei jūsų pirmą išrinkimo užklausoje yra penki laukai, iš kurių pirmasis yra datos/laiko duomenų, patikrinkite, ar viena kitos išrinkimo užklausa, kuriuos jungiate taip pat yra penki laukai, iš kurių pirmasis yra datos/laiko duomenų, ir pan.

  5. Jei reikia, kriterijus į laukus galite įtraukti įvesdami atitinkamas išraiškų laukų tinklelio eilutėje kriterijai.

  6. Užbaigę laukų ir laukų kriterijų įtraukimą paleiskite išrinkimo užklausos ir peržiūrėkite jos išvestį. Skirtuko dizainas grupėje rezultatai spustelėkite vykdyti.

  7. Perjunkite užklausos rodinį į dizaino rodinį.

  8. Įrašykite išrinkimo užklausą ir palikite ją atidarytą.

  9. Šią procedūrą pakartokite su kiekviena išrinkimo užklausa, kurią norite sujungti.

Dabar, kai sukūrėte savo išrinkimo užklausų, metas juos sujungti. Šiame žingsnyje, galite sukurti "union" užklausos nukopijuodami ir įklijuodami SQL sakinių.

  1. Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos dizainas.

  2. Uždarykite dialogo langą Lentelės rodymas.

  3. Skirtuko dizainas grupėje užklausos spustelėkite Union. Prieigos užklausos kūrimo lange paslepia, ir rodo SQL rodinio objektų skirtuko lapą. Šiuo metu yra tuščias SQL rodinio objektų skirtuko lapą.

  4. Spustelėkite pirmos išrinkimo užklausos, kurią norite sujungti į „union“ užklausą, skirtuką.

  5. Skirtuke Pagrindinis spustelėkite rodinys > SQL rodinys.

  6. Nukopijuokite išrinkimo užklausos SQL sakinį. Spustelėkite skirtuką "union" užklausą, kad sukurti anksčiau.

  7. Įklijuokite išrinkimo užklausos SQL sakinį į „union“ užklausos SQL rodinio objektų skirtuko lapą.

  8. Panaikinkite kabliataškį (;) atrankos užklausos SQL sakinio gale.

  9. Paspauskite Enter, kad perkeltumėte žymiklį žemyn per vieną eilutę, ir tada naujoje eilutėje įveskite UNION.

  10. Spustelėkite kitos išrinkimo užklausos, kurią norite sujungti į „union“ užklausą, skirtuką.

  11. Kartokite 5–10 šios procedūros veiksmus, kol nukopijuosite ir įklijuosite visus atrankos užklausų SQL sakinius į sąjungos užklausos SQL rodinio langą. Po paskutinės atrankos užklausos nepanaikinkite kabliataškio ir po SQL sakinio nieko neįveskite.

  12. Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.

Sąjungos užklausos rezultatai rodomi duomenų lapo rodinyje.

Žiūrėti "union" užklausos kūrimo pavyzdys

Štai, pavyzdžiui, kad jūs galite atkurti Northwind pavyzdžio duomenų bazę. "Union" užklausose renka asmenų pavardes iš lentelės Klientai ir juos sujungia su žmonėmis iš lentelės tiekėjai pavadinimais. Jei norite laikytis kartu, dirbti šiuos veiksmus Northwind pavyzdžio duomenų bazės kopiją.

Vaizdo pavyzdys kūrimo "union" užklausos Northwind pavyzdys prieigos šablone.

Toliau pateikiami veiksmai reikia sudaryti šiame pavyzdyje:

  1. Sukurkite du išrinkimo užklausų, pavadintą Query1 ir Query2 su lentelės Klientai ir produktų atitinkamai kaip duomenų šaltinių. Naudokite vardo ir pavardės laukų reikšmes.

  2. Sukurkite naują užklausą, pavadintą Query3 su nėra duomenų šaltinio iš pradžių, o tada spustelėkite Sąjungos komandą, skirtuko dizainas grupėje padaryti šią užklausą į "Union" užklausą.

  3. Nukopijuokite ir įklijuokite SQL sakinių iš Query1 ir Query2 į Query3. Įsitikinkite, kad pašalinti papildomų ir pridėti raktažodį UNION. Galite patikrinti savo rezultatus duomenų lapo rodinyje.

  4. Užsakymo sąlygoje įtraukti į vieną iš užklausų ir įklijuokite tvarka pagal sakinį į "union" užklausos SQL rodinys. Atkreipkite dėmesį, kad Query3, "union" užklausą, kai rikiavimas yra apie pridėtas, pirmiausia, atskirdami pašalinami, tada lentelės pavadinimas iš laukų pavadinimai.

  5. Galutinis, sujungia bei rūšių pavadinimus, pavyzdžiui "union" užklausos SQL yra tokia:

    SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    ORDER BY [Last Name], [First Name];

Jei esate labai patogu rašyti SQL sintaksė, tikrai galite įrašyti savo SQL sakinį "union" užklausos tiesiogiai į SQL Rodyti. Tačiau, jums gali būti naudinga stebėti požiūris kopijuojant ir įklijuojant kitų objektų užklausos SQL. Kiekvienos užklausos gali būti sudėtingiau už paprastą išrinkimo užklausą pavyzdžiai čia. Gali būti savo galimybėmis sukurti ir išbandyti kiekvienos užklausos atidžiai prieš derinant juos į "union" užklausą. Jei "union" užklausos paleisti nepavyksta, galite pakoreguoti kiekvienos užklausos atskirai, kol ji pavyko ir tada atkurti "union" užklausą teisingas sintaksė.

Peržiūrėkite šį straipsnį ir Sužinokite daugiau patarimų ir gudrybių, kaip naudoti "union" užklausos skyrių.

Nuo ankstesnės sekcijos iš "Northwind" duomenų bazės pavyzdyje, tik duomenis iš dviejų lentelių sujungiami. Tačiau galite sujungti trijų ar daugiau lentelių labai lengvai "union" užklausoje. Pvz., remdamasi ankstesniame pavyzdyje, galite taip pat įtraukti darbuotojų pavadinimus į užklausos išvestį. Įtraukiant trečiosios užklausos ir derinant su ankstesnės SQL sakinio su papildomų raktažodis UNION, pvz., tai galite atlikti užduotį:

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Kai peržiūrite rezultatus duomenų lapo rodinyje, visų darbuotojų bus pateiktas pavyzdys įmonės pavadinimą, kuris tikriausiai nėra labai naudinga. Jei norite, lauke nurodyti, ar asmuo yra įmonės darbuotojas, iš tiekėjo arba iš kliento, galite įtraukti į nustatytą vertę vietoj įmonės pavadinimą. Štai, kaip atrodys SQL:

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Štai kaip rezultatas rodomas duomenų lapo rodinyje. Programa Access rodo šiuos įrašus penkių pavyzdys:

Užimtumo

Pavardė

Vardas

Organizacijos

Freehafer

Teresė

Organizacijos

Katerina Kolesnikova

Laura

Tiekėjas

Glasson

Stuart

Klientas

Goldšmito

Daniel

Klientas

Gratacos Solsona

Antonio

Aukščiau užklausos gali sumažėti dar labiau, nes prieiga tik perskaito išvesties laukų pavadinimai iš pirmos užklausos "union" užklausoje. Čia pamatysite, mes pašalintus išvestyje antrajame ir trečiajame užklausos sekcijos:

SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers

UNION

SELECT "In-house", [Last Name], [First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

"Access" union "užklausą, užsakymo leidžiama tik vieną kartą, tačiau kiekvienos užklausos galima filtruoti atskirai. Remiantis ankstesniame skyriuje sujungimo užklausą, Štai pavyzdys, kai mes filtravote kiekvienos užklausos įtraukdami sąlygą WHERE.

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"

UNION

SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"

ORDER BY [Last Name], [First Name];

Perjungti į duomenų lapo rodinį ir pamatysite rezultatus, panašų į šį:

Užimtumo

Pavardė

Vardas

Tiekėjas

Andersen

Elizabeth A.

Organizacijos

Freehafer

Teresė

Klientas

Hasselberg

Jonas

Organizacijos

Hellung Larsen

Anne

Tiekėjas

Hernandez Echevarria

Amaya

Klientas

Mortensen

Sven

Tiekėjas

Sandberg

Mikael

Tiekėjas

Sunsaitė

Lina

Organizacijos

Thorpe

Tomas

Tiekėjas

Weiler

Cornelia

Organizacijos

Zare

Rimantas

Jei į užklausas, kad Sąjungos labai skiriasi, galite susidurti su situacija, kurioje yra išvesties laukas turi sujungti duomenis skirtingų tipų duomenų. Jei taip, "union" užklausos dažniausiai pateiks rezultatus kaip teksto duomenų tipo nuo kad duomenų tipas gali turėti teksto ir skaičių.

Norėdami suprasti, kaip tai veikia, naudosime " Produkto operacijas " union "užklausos Northwind pavyzdžio duomenų bazę. Atidarykite tą duomenų bazę ir produkto operacijos užklausos duomenų lapo rodinyje. Paskutinį kartą dešimt įrašus turėtų būti panašus į šį išvesties:

Produkto ID

Užsakymo data

Įmonės pavadinimas

Operacija

Kiekis

77

1/22/2006

Tiekėjo B

Pirkti

60

80

1/22/2006

Tiekėjo D

Pirkti

75

81

1/22/2006

Tiekėjas A

Pirkti

125

81

1/22/2006

Tiekėjas A

Pirkti

200

7

2006-20-1

Įmonės D

Pardavimas

10

51

2006-20-1

Įmonės D

Pardavimas

10

80

2006-20-1

Įmonės D

Pardavimas

10

34

1/15/2006

Įmonės a.

Pardavimas

100

80

1/15/2006

Įmonės a.

Pardavimas

30

Tarkime, norite kiekis lauke skaidyti į dvi - pirkimo ir pardavimo. Taip pat Tarkime, kad norite būti nustatytas lauko reikšmės su reikšmės nėra nulis. Štai, kaip atrodys, "union" užklausos SQL:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC; 

Jei pereinate į duomenų lapo rodinį, matysite paskutinį dešimt įrašus dabar rodomas kaip ši:

Produkto ID

Užsakymo data

Įmonės pavadinimas

Operacija

Pirkti

Parduoti

74

1/22/2006

Tiekėjo B

Pirkti

20

0

77

1/22/2006

Tiekėjo B

Pirkti

60

0

80

1/22/2006

Tiekėjo D

Pirkti

75

0

81

1/22/2006

Tiekėjas A

Pirkti

125

0

81

1/22/2006

Tiekėjas A

Pirkti

200

0

7

2006-20-1

Įmonės D

Pardavimas

0

10

51

2006-20-1

Įmonės D

Pardavimas

0

10

80

2006-20-1

Įmonės D

Pardavimas

0

10

34

1/15/2006

Įmonės a.

Pardavimas

0

100

80

1/15/2006

Įmonės a.

Pardavimas

0

30

Toliau šiame pavyzdyje, ką daryti, jei norite laukus su nuliu tuščias? Galite modifikuoti SQL Rodyti nieko vietoj nulis įtraukdami Null raktažodį, pvz., šiuos veiksmus:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Tačiau, kaip jums gali būti pažymėta, pereiti į duomenų lapo rodinį, dabar yra kad netikėtas rezultatas. Stulpelyje pirkti išvalomas kiekvieną lauką:

Produkto ID

Užsakymo data

Įmonės pavadinimas

Operacija

Pirkti

Parduoti

74

1/22/2006

Tiekėjo B

Pirkti

77

1/22/2006

Tiekėjo B

Pirkti

80

1/22/2006

Tiekėjo D

Pirkti

81

1/22/2006

Tiekėjas A

Pirkti

81

1/22/2006

Tiekėjas A

Pirkti

7

2006-20-1

Įmonės D

Pardavimas

10

51

2006-20-1

Įmonės D

Pardavimas

10

80

2006-20-1

Įmonės D

Pardavimas

10

34

1/15/2006

Įmonės a.

Pardavimas

100

80

1/15/2006

Įmonės a.

Pardavimas

30

Taip atsitinka yra to Access nustato laukus iš pirmos užklausos duomenų tipus. Šiame pavyzdyje neapibrėžta reikšmė yra skaičius.

Taigi, kas nutiks, jei bandysite ir įterpti tuščią reikšmę laukai tuščia eilutė? Šis bandymas SQL gali atrodyti maždaug taip:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Perjungus į duomenų lapo rodinį, matysite, kad prieigos gauna pirkti reikšmes, bet jį konvertuoti reikšmes į tekstą. Žinokite, tai yra teksto reikšmių, nes jie lygiuojami kairėje duomenų lapo rodinyje. Tuščios eilutės iš pirmos užklausos nėra skaičius, todėl galite peržiūrėti šiuos rezultatus. Taip pat pastebėsite, kad pardavimas reikšmės taip pat konvertuoti į tekstą, nes pirkimo įrašus, kuriuose yra tuščia eilutė.

Produkto ID

Užsakymo data

Įmonės pavadinimas

Operacija

Pirkti

Parduoti

74

1/22/2006

Tiekėjo B

Pirkti

20

77

1/22/2006

Tiekėjo B

Pirkti

60

80

1/22/2006

Tiekėjo D

Pirkti

75

81

1/22/2006

Tiekėjas A

Pirkti

125

81

1/22/2006

Tiekėjas A

Pirkti

200

7

2006-20-1

Įmonės D

Pardavimas

10

51

2006-20-1

Įmonės D

Pardavimas

10

80

2006-20-1

Įmonės D

Pardavimas

10

34

1/15/2006

Įmonės a.

Pardavimas

100

80

1/15/2006

Įmonės a.

Pardavimas

30

Taip, kaip išspręsti šį įspūdį?

Galima kurti užklausą, kad tikėtis būti skaičių lauko reikšmės. Kad būtų galima atlikti naudojant reiškinį:

IIf(False, 0, Null)

Niekada sąlyga patikrinti, FALSE (klaidinga), bus teisinga, todėl reiškinį visada pateikiama Null, bet prieigos vis dar vertina abiejų išvesties parinktys ir nusprendžia išvesties skaitinė arba neapibrėžta.

Štai kaip mes naudojame šio reiškinio mūsų darbo pavyzdys:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Atkreipkite dėmesį, kad nereikia keisti antrosios užklausos.

Jei galite pereiti į duomenų lapo rodinį, dabar pamatysite rezultatus, kad mes norime:

Produkto ID

Užsakymo data

Įmonės pavadinimas

Operacija

Pirkti

Parduoti

74

1/22/2006

Tiekėjo B

Pirkti

20

77

1/22/2006

Tiekėjo B

Pirkti

60

80

1/22/2006

Tiekėjo D

Pirkti

75

81

1/22/2006

Tiekėjas A

Pirkti

125

81

1/22/2006

Tiekėjas A

Pirkti

200

7

2006-20-1

Įmonės D

Pardavimas

10

51

2006-20-1

Įmonės D

Pardavimas

10

80

2006-20-1

Įmonės D

Pardavimas

10

34

1/15/2006

Įmonės a.

Pardavimas

100

80

1/15/2006

Įmonės a.

Pardavimas

30

Kitas būdas pasiekti tą patį rezultatą yra pateikiamas užklausas "union" užklausos dar kita užklausa, pridėkite:

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

Su kiekvienu lauku, prieigos grąžina fiksuotų reikšmių, galite nustatyti duomenų tipą. Žinoma, nenorite, kad šią užklausą trukdyti rezultatus, kad pavyko išvengti, yra įtraukti sąlygą WHERE FALSE rezultatus:

WHERE False

Tai yra šiek tiek apgauti, nes tai yra FALSE (klaidinga) ir tada užklausos nepateikia nieko. Derinant šį išrašą su esamą SQL ir mes perėjus užbaigta sakinį taip:

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

UNION

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Pastaba: Kombinuotosios čia šiame pavyzdyje iš "Northwind" duomenų bazės pateikia 100 įrašų, o dvi atskiras užklausos grąžinti 58 ir 43 įrašus iš viso 101 įrašai. Šis neatitikimas priežastis yra todėl, kad dviejų įrašų nėra unikalios. Ieškokite skyriuje darbo su "union" užklausos naudojant Sąjungos visus unikalius įrašus, ir Sužinokite, kaip išspręsti šį scenarijų, naudojant UNION ALL.

Konkretus "union" užklausos yra sujungti su vienas įrašas, kuriame yra vienas arba daugiau laukų sumą įrašų rinkinį.

Čia yra vienas pavyzdys, kad kurdami į duomenų bazės Northwind iliustruoja, kaip gauti bendrą "union" užklausą.

  1. Sukurti naują paprastą užklausą Peržiūrėti pirkimo alaus (produkto ID = 34 duomenų bazės Northwind) naudojant SQL sintaksė:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  2. Perjungti į duomenų lapo rodinį ir pamatysite keturių pirkimą:

    Dienos

    Kiekis

    1/22/2006

    100

    1/22/2006

    60

    4/4/2006

    50

    2006-5-4

    300

  3. Norėdami gauti sumą, sukurti paprastą gaudančių užklausą naudodami šiuos SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Perjungti į duomenų lapo rodinį ir pamatysite tik vieną įrašą:

    Gautas MaxOfDate

    SumOfQuantity

    2006-5-4

    510

  5. Sujungti šiuos du užklausų į "union" užklausą pridėti įrašą bendras pirkimo įrašus:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    UNION
    
    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  6. Perjungti į duomenų lapo rodinį ir pamatysite keturių pirkinių sumą kiekvienos po jos einančiu įrašą, kurio sumuojamos kiekis:

    Dienos

    Kiekis

    1/22/2006

    60

    1/22/2006

    100

    4/4/2006

    50

    2006-5-4

    300

    2006-5-4

    510

Kuri apima pagrindai sumos įtraukimas į sujungimo užklausą. Taip pat galite įtraukti tiek užklausų, pvz., "Išsamios" ir "Suma" vizualiai atskirti bendrą įrašą iš kitų įrašų fiksuotų reikšmių. Galite peržiūrėti naudodami fiksuotų reikšmių sujungti trijų ar daugiau lentelių arba užklausų "union" užklausojeskyriuje.

"Union" užklausos programoje "Access" pagal numatytuosius nustatymus įtraukti tik unikalius įrašus. Bet kas, jei norite įtraukti visus įrašus? Kitas pavyzdys gali būti naudinga čia.

Ankstesniame skyriuje, mes jums nustatyta kaip sukurti bendrą "union" užklausą. Modifikuoti, "union" užklausos SQL įtraukti produkto ID = 48:

SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION

SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Purchase Order Details].[Date Received];

Perjungti į duomenų lapo rodinį ir pamatysite šiek tiek klaidingą rezultatas:

Dienos

Kiekis

1/22/2006

100

1/22/2006

200

Vienas įrašas, žinoma nepateikia dvigubu kiekio iš viso.

Priežastis, dėl kurios matote šį rezultatą yra nes vieną dieną to paties kiekio saldainių parduota du kartus - įrašytas lentelėje pirkimo užsakymo išsami informacija. Štai paprastą išrinkimo užklausą rezultatas, rodantis abiejų įrašų į duomenų bazės Northwind:

Pirkimo užsakymo ID

Produktas

Kiekis

100

Northwind Traders šokoladas

100

92

Northwind Traders šokoladas

100

"Union" užklausos anksčiau pažymėta, galite matyti pirkimo užsakymo ID laukas nėra įtraukta, ir du laukai nėra sudaro du unikalius įrašus.

Jei norite įtraukti visus įrašus, naudokite UNION ALL vietoj Sąjungos savo SQL. Tai dažniausiai gali turėti įtakos rezultatų, rūšiavimą, galbūt norėsite rūšiuoti pagal sąlygą nustatyti rūšiavimo tvarką, taip pat įtraukti. Čia yra pakeistos SQL kūrimo išjungimas ankstesniame pavyzdyje:

SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION ALL

SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Total];

Perjungti į duomenų lapo rodinį ir pamatysite visus duomenis be visuma kaip paskutinį įrašą:

Dienos

Sumos

Kiekis

1/22/2006

100

1/22/2006

100

1/22/2006

Bendroji suma

200

Bendro naudojimo "union" užklausos yra naudojamas kaip pasirinktinio įvedimo lauko valdiklio formos įrašo šaltinis. Pasirinkite reikšmę, kurią norite filtruoti formos įrašus, galite naudoti, pasirinktinio įvedimo laukas. Pvz., filtravimo darbuotojo įrašus iš savo miesto.

Norėdami pamatyti, kaip tai veikia, čia yra kitas pavyzdys, galite kurti duomenų bazės Northwind iliustruoja šį scenarijų.

  1. Sukurti paprastą išrinkimo užklausą naudodami šį SQL sintaksę:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Perjungti į duomenų lapo rodinį ir pamatysite iš šių rezultatų:

    Miestas

    Filtras

    Sietlas

    Sietlas

    Bellevue

    Bellevue

    Redmond

    Redmond

    Kirkland

    Kirkland

    Sietlas

    Sietlas

    Redmond

    Redmond

    Sietlas

    Sietlas

    Redmond

    Redmond

    Sietlas

    Sietlas

  3. Peržiūrint šiuos rezultatus, galite nematyti daug reikšmės. Išplėsti užklausos nors ir ją transformuoti į sujungimo užklausą, naudodami šiuos SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Perjungti į duomenų lapo rodinį ir pamatysite iš šių rezultatų:

    Miestas

    Filtras

    < visus >

    *

    Bellevue

    Bellevue

    Kirkland

    Kirkland

    Redmond

    Redmond

    Sietlas

    Sietlas

    Programa Access atlieka Sąjungos devyniomis įrašus, anksčiau parodyta, fiksuotas laukų reikšmes, < > ir "*".

    Kadangi šio sujungimo sąlyga nėra UNION ALL, prieigos pateikia tik unikalius įrašus tai kiekvieno miesto grąžinama tik vieną kartą su fiksuotas reikšmes, kurios atitinka.

  5. Dabar kai jau užbaigta "union" užklausos rodomi kiekvieno miesto pavadinimas, tik tada, kai kartu su parinktį, efektyviai pažymi visuose miestuose, galite naudoti šią užklausą kaip įrašo šaltinį pasirinktinio įvedimo lauką į formą. Naudojant šio pavyzdžio kaip pavyzdį, galima sukurti pasirinktinio įvedimo lauko valdiklio formos, nustatykite šią užklausą kaip įrašo šaltinį, filtrą stulpelio ypatybę stulpelio plotį kaip 0 (nulis), kad vizualiai ją slėpti, ir nustatykite ypatybę susietas stulpelis 1 nurodyti indeksas antrojo stulpelio. Filtro ypatybės pačią formą, tada galite įtraukti kodą, pvz., toliau aktyvinti formos filtro reikšmę, kas buvo pasirinkta pasirinktinio įvedimo lauko valdiklis:

    Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'"
    Me.FilterOn = True

    Vartotojo formos tada galite filtruoti formos įrašus į konkretų miestą pavadinimą arba pasirinkite < visus > pateikti visus įrašus visuose miestuose.

Puslapio viršus

Tobulinkite savo „Office“ įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijunkite prie „Office Insider“ dalyvių

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×