Avatar billede mortency Nybegynder
06. juni 2005 - 17:32 Der er 9 kommentarer og
1 løsning

Søging fra flere tabeller

Jeg vil søge i flere tabeller

tblDocuments
- DocTitle
- DocContent

tblNews
- NewsTittel
- Ingress
- BrodTekst

Hvordan kan jeg få dette ut i samme query så jeg slipper å kjøre to forskjellige query`er?

//Morten
Avatar billede arne_v Ekspert
06. juni 2005 - 17:57 #1
UNION
Avatar billede arne_v Ekspert
06. juni 2005 - 17:59 #2
(SELECT doctitle FROM tbldocuments WHERE doccontent LIKE '%xxx%')
UNION
(SELECT newstitle FROM tblnews WHERE brodtekst LIKE '%xxx%')
Avatar billede mortency Nybegynder
06. juni 2005 - 22:02 #3
Med union så må man vel ha samme antall poster i queryene?

Og jeg får feilmelding med The text, ntext or image data type cannot be selected as distinct.

Har du noen andre ideer?

Jeg skal søke i flere tabeller med forskjellige antall felter.

Takk skal du ha!

//Morten
Avatar billede arne_v Ekspert
06. juni 2005 - 22:44 #4
hvor kommer distinct ind i billedet ?

du kan tilføje manglende felter ved at angive konstanter:

(SELECT doctitle,'N/A' FROM tbldocuments WHERE doccontent LIKE '%xxx%')
UNION
(SELECT newstitle,ingress FROM tblnews WHERE brodtekst LIKE '%xxx%')

hvis tabeller slet ikke har nogen ens struktur må du lave 2 queries
Avatar billede ldanielsen Nybegynder
07. juni 2005 - 12:03 #5
Prøv med UNION ALL, UNION viser nemlig kun unikke resultater, det er vel deraf det med DISTINCT kommer frem i fejlmeldingen
Avatar billede arne_v Ekspert
07. juni 2005 - 16:42 #6
det var en mulighed
Avatar billede mortency Nybegynder
09. juni 2005 - 18:50 #7
Hei eksperter!

Union all fungerer bra men problemet er at den henter ut feltene som navnet som er i den første select`en. Hvordan kan jeg give den felt navnet som er i den selecten som den finne forekomsten i?

(SELECT doctitle,'N/A' as Ingress FROM tbldocuments WHERE doccontent LIKE '%xxx%')
UNION
(SELECT newstitle,ingress FROM tblnews WHERE brodtekst LIKE '%xxx%')

Eks: Hvis den finner 2 felter i tblDocuments og 1 i tblNews så kommer det frem slik:
DocTitle      Ingress
xxx er bra   
Hva er xxx
              Hva synes du om xxx 3 filmen?

Alle data skal hentes ut med ASP så jeg kan vel lage en if setning der men hadde håpet å kunne løse dette i SQL, noen som har noen ideer?

//Morten
Avatar billede mortency Nybegynder
09. juni 2005 - 18:51 #8
Problemet er at feltene (ID) som den skal referer til er DocID og NewsID og i ASP documentet er det index.asp?NewsID= og index.asp?DocID= i de forskjellige tabellene.

//Morten
Avatar billede mortency Nybegynder
12. juni 2005 - 21:40 #9
Noen ideer?
Avatar billede slash Nybegynder
14. juni 2005 - 15:00 #10
Du kan vel bare selecte en dummyværdi med ud og så teste på værdien i ASP, á la:
(SELECT doctitle,'N/A' as Ingress, 'DOCSID' as DocsID FROM tbldocuments WHERE doccontent LIKE '%xxx%')
UNION
(SELECT newstitle,ingress, 'NEWSID' as NewsID FROM tblnews WHERE brodtekst LIKE '%xxx%')

if not isnothing(tmpRes("NewsID")) then
    index.asp?NewsID= 
elseif not isnothing(tmpRes("DocsID")) then
    index.asp?DocsID=
end if
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester