Avatar billede oasen Nybegynder
18. maj 2003 - 21:09 Der er 25 kommentarer og
2 løsninger

Kan man ikke bruge virtuelle tabeller i MySQL?

Jeg ved, at følgende kald fungerer i MS Access/MS SQL:

Select tab1.ID1, temp.ID2 From tab1 Left Join [Select ID2 From tab2]. As temp On tab1.ID1 = temp.ID2

Men det vil MySQL ikke være med til. Er syntaksen en anden, eller er jeg nødt til at gå den sure vej og oprette en midlertidig fysisk tabel fremfor en virtuel?
Avatar billede arne_v Ekspert
18. maj 2003 - 21:16 #1
MySQL har det ikke så godt med forskellige avancerede konstruktioner
i SELECT.

Men kan du ikke bare omformulere queryen ?

Select tab1.ID1, tab2.ID2 From tab1 Left Join tab2 On tab1.ID1 = tab2.ID2

bør vel returnere præcst det samme !?
Avatar billede arne_v Ekspert
18. maj 2003 - 21:16 #2
Iøvrigt forbinder jeg virtuel tabel med et view og ikke med en
"select i select".
Avatar billede morw Nybegynder
18. maj 2003 - 21:30 #3
Der er subselects i nyere versioner af mysql. Tror du skal have 4.1 for at benytte den konstruktion du nævner.

Views kommer i 5.1
Avatar billede oasen Nybegynder
18. maj 2003 - 21:31 #4
Problemet er, at jeg er nødt til at have en where-clause med i min left join, der stiller krav til posterne i tab2.
Og dermed får jeg ikke returneret ALLE poster i tab1, hvilket er ønsket.
Avatar billede oasen Nybegynder
18. maj 2003 - 21:32 #5
Men 4.1 er ikke erklæret "stable" endnu, vel?
Avatar billede morw Nybegynder
18. maj 2003 - 21:33 #6
MySQL 4.1 -- Alpha release (use this for previewing and testing new features)
Avatar billede oasen Nybegynder
18. maj 2003 - 21:34 #7
Mente nok...
Avatar billede morw Nybegynder
18. maj 2003 - 21:35 #8
Den feature du bruger er "Derived tables"

Derived tables (unnamed views) are now supported. Basically, a derived table is a subquery in the FROM clause of a SELECT statement. Here is an example:
SELECT t1.a FROM t1, (SELECT * FROM t2) t3 WHERE t1.a=t3.a;

Igen fra (4.1)
Avatar billede oasen Nybegynder
18. maj 2003 - 21:36 #9
Øv... men tak for det...
Avatar billede oasen Nybegynder
18. maj 2003 - 21:37 #10
Understøtter den så union??
Avatar billede morw Nybegynder
18. maj 2003 - 21:39 #11
UNION is implemented in MySQL 4.0.0.
Avatar billede morw Nybegynder
18. maj 2003 - 21:41 #12
FYI:

Link til at finde ud af hvike versioner der understøtter hvad: http://www.mysql.com/doc/en/News-4.0.x.html
Avatar billede oasen Nybegynder
18. maj 2003 - 21:42 #13
Hmm...
Avatar billede oasen Nybegynder
18. maj 2003 - 21:45 #14
Er det *meget* krævende at oprette en fysisk tabel og slette den igen ved hver eneste anmodning om en ny side?
Avatar billede arne_v Ekspert
18. maj 2003 - 21:46 #15
Ja - det må være tungt.

Foruden at du skal tage højde for problematikken med flere
samtidige brugere.
Avatar billede morw Nybegynder
18. maj 2003 - 21:48 #16
Ja, det er lidt tungt. Det må kunne lade sig gøre på en anden måde. Hvis du endelig skal bruge en temp tabel så:

CREATE TEMPORARY TABLE ...
Avatar billede arne_v Ekspert
18. maj 2003 - 21:48 #17
Og jeg forstår ikke begrundelsen for ikke bare at have en join på
tab2 - kan du ikek bare putte de where betingelser på det hele ?
Avatar billede oasen Nybegynder
18. maj 2003 - 21:49 #18
Så må jeg til at være kreativ...
Avatar billede oasen Nybegynder
18. maj 2003 - 21:51 #19
Jeg har beskrevet problemstillingen her: http://www.eksperten.dk/spm/345402
Avatar billede morw Nybegynder
18. maj 2003 - 21:56 #20
Prøv lige at forklare hvad der er i de 2 tabeller og hvad det er du vil i menneskesprog
Avatar billede arne_v Ekspert
18. maj 2003 - 21:56 #21
Enten:

Select tab1.ID1, tab2.ID2 From tab1 Left Join tab2 On tab1.ID1 = tab2.ID2 WHERE tab2.ID3=8

eller:

Select tab1.ID1, tab2.ID2 From tab1 Left Join tab2 On tab1.ID1 = tab2.ID2 WHERE (tab2.ID3=8 OR tab2.ID3 IS NULL)

skulle jeg tro ville virke.
Avatar billede morw Nybegynder
18. maj 2003 - 22:01 #22
Select Tabel1.ID1, Tabel1.ID2
FROM Tabel1
LEFT JOIN Tabel2 On Tabel1.ID2 = Tabel2.ID2 AND Tabel2.id3 = 8

Hvorfor kan du ikke have den betingelse i selve join'en?
Avatar billede oasen Nybegynder
18. maj 2003 - 22:07 #23
Øjeblik...
Avatar billede oasen Nybegynder
18. maj 2003 - 22:20 #24
Jeg kan ikke have en Where-clause, da jeg derfor KUN vil få de poster fra tabel1, der har en relationær post i tabel2.

I løkken tester jeg på, om feltet er null.

arne_v -> Din første giver mig således ikke det rigtige udtræk. Den anden ville jeg tro virkede, men nej...

Derimod ser det ud til, det var løsningen at flytte betingelsen, som du beskriver, morw...
Avatar billede oasen Nybegynder
18. maj 2003 - 22:33 #25
Lægger du også et svar?
Avatar billede morw Nybegynder
18. maj 2003 - 22:34 #26
ok ;-D
Avatar billede oasen Nybegynder
18. maj 2003 - 22:44 #27
Og mange tak for hjælpen! :)
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