Avatar billede Slettet bruger
19. oktober 2003 - 17:36 Der er 9 kommentarer og
1 løsning

query i 3 tabeller ad gangen

Hej!

Jeg har 3 tabeller, der har nogle navne på felter tilfælles, blandt andet id og sagsnummer.

Det jeg gerne vil er at hive 1 resultatsæt ud ved hjælp af 1 forespørgsel på alle 3 tabeller.

For så vidt kan jeg bruge det her

SELECT id, sagsnummer FROM emm_bolig_hse WHERE sagsnummer = "E9843587"

SELECT id, sagsnummer FROM emm_bolig_grunde WHERE sagsnummer = "E9843587"

SELECT id, sagsnummer FROM emm_bolig_udlejning WHERE sagsnummer = "E9843587"

Men det er jo ikke skide optimalt med 3 queryes.

Derfor skal de bindes sammen til 1.
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 17:40 #1
Kan du ikke gøre: ?

SELECT id, sagsnummer FROM emm_bolig_hse, emm_bolig_grunde, emm_bolig_udlejning WHERE sagsnummer = "E9843587"
Avatar billede Slettet bruger
19. oktober 2003 - 17:59 #2
nej, Column: 'id' in field list is ambiguous
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 18:02 #3
Kolonnen id og  sagsnummer inderholder den det samme i alle tabeller?
Avatar billede Slettet bruger
19. oktober 2003 - 18:08 #4
Nej, de hedder det samme, men indeholder ikke det samme.
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 18:13 #5
Hvad så hvis du skriver: ?

SELECT emm_bolig_hse.id, emm_bolig_hse.sagsnummer, emm_bolig_grunde.id, emm_bolig_grunde.sagsnummer, emm_bolig_udlejning.id, emm_bolig_udlejning.sagsnummer FROM emm_bolig_hse, emm_bolig_grunde, emm_bolig_udlejning WHERE sagsnummer = "E9843587"
Avatar billede Slettet bruger
19. oktober 2003 - 18:13 #6
Jeg har fundet frem til det her som virker med 2 tabeller, men ikke med 3...forstår jeg ikke:

SELECT
IFNULL(emm_bolig_hse.id, emm_bolig_grunde.id) AS id,
IFNULL(emm_bolig_hse.sagsnummer, emm_bolig_grunde.sagsnummer) AS sagsnummer
FROM emm_bolig_dummy AS D
LEFT JOIN emm_bolig_hse ON (D.num = 0)
LEFT JOIN emm_bolig_grunde ON (D.num = 1)
WHERE
(emm_bolig_hse.sagsnummer = "E9843587" OR emm_bolig_grunde.sagsnummer = "E9843587")
AND
(D.num < 2 AND IFNULL(emm_bolig_hse.id,emm_bolig_grunde.id) IS NOT NULL)

Ideen er hentet fra http://jinxidoru.com/tutorials/union.html og er en slags pseudo union.

Jeg har oprettet tabellen emm_bolig_dummy og sat 3 poster ind...hmmm
Avatar billede Slettet bruger
19. oktober 2003 - 18:14 #7
Så er det sagsnummer der er ambigious
Avatar billede Slettet bruger
19. oktober 2003 - 18:18 #8
ok..IFNULL() tager 2 parametre, så det er derfor jeg får fejl i min egen
Avatar billede jakobclausen Nybegynder
19. oktober 2003 - 18:33 #9
Ved godt det ikke er helt det du søger, men du kan jo samle de tre forespørgsler i en query med UNION:


$query = SELECT id, sagsnummer FROM emm_bolig_hse WHERE sagsnummer = "E9843587"
UNION
SELECT id, sagsnummer FROM emm_bolig_grunde WHERE sagsnummer = "E9843587"
UNION
SELECT id, sagsnummer FROM emm_bolig_udlejning WHERE sagsnummer = "E9843587"
Avatar billede Slettet bruger
19. oktober 2003 - 18:40 #10
Ja, jeg er ved at downloade MySQL 4.0.15 ;)

Men det er lidt træls at være afhængig af at dovne webhoteller ikke opgraderer deres software :(
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