Gå til innhold

Hjelp til å select uten subquery/subselect


Anbefalte innlegg

Jeg skal gjøre et utplukk fra mysql 4.0. Denne støtter ikke subselect.

 

Koden slik den ser ut nå (for mysql 4.1 og opp):

SELECT *, "TRUE " AS Tilstede FROM tabellA
WHERE aid IN (SELECT aid FROM tabellB WHERE bid = $bid)
UNION
SELECT *, "FALSE" AS Tilstede FROM tabellA
WHERE aid NOT IN (SELECT aid FROM tabellB WHERE bid = $bid)

 

Jeg har litt problemer med å få skrevet om denne til å fungere godt i 4.0. Har prøvd meg frem med JOIN, men kommer ikke helt i mål. Noen som kan hjelpe meg med å få den til å fungere i mysql 4.0?

Lenke til kommentar
Videoannonse
Annonse
Jeg skal gjøre et utplukk fra mysql 4.0. Denne støtter ikke subselect.

 

Koden slik den ser ut nå (for mysql 4.1 og opp):

SELECT *, "TRUE " AS Tilstede FROM tabellA
WHERE aid IN (SELECT aid FROM tabellB WHERE bid = $bid)
UNION
SELECT *, "FALSE" AS Tilstede FROM tabellA
WHERE aid NOT IN (SELECT aid FROM tabellB WHERE bid = $bid)

 

Jeg har litt problemer med å få skrevet om denne til å fungere godt i 4.0. Har prøvd meg frem med JOIN, men kommer ikke helt i mål. Noen som kan hjelpe meg med å få den til å fungere i mysql 4.0?

5565755[/snapback]

Noe i retning av dette?

 

select a.*, b.bid is not null
 from tabellA a right outer join tabellB b on (
   (a.aid = b.aid) and (b.bid = $bid)
 )

 

Forutsatt at MySQL v4 støtter denne syntaksen da :)

Endret av roac
Lenke til kommentar

Hmm... Fikk ikke den til å virke helt som den skulle gitt. Den gir meg også en rad bestående kun av NULL. (SELECT id IS NULL er vel grunnen til det...)

 

For ordens skyld skal jeg prøve å forklare hvordan jeg vil ha utplukket.

 

Jeg har en tabell A som inneholder spørsmål. Hvert spørsmål har en id.

Tabell B inneholder brukerens svar på spørsmålene. Tabell B består hovedsaklig av brukerid, spørsmålsid og svarid.

 

Det jeg ønsker en liste over spørsmålene, hvor det kommer frem hvilke som er besvart av angitt brukerid.

 

Listen jeg ønsker å se vil være som dette:

Nr Spm Avgitt svar?

1. Spørmål 1? True

2. Spørmål 2? False

3. Spørmål 3? True

 

Hvor True/False forteller om brukeren har avgitt svar eller ikke.

Eksempel i første post virker slik, men denne krever støtte for subselect.

 

Takk for hjelpen!

 

[EDIT] Vanskelig å få listen til å se bra ut, dessverre.

Endret av XmasB
Lenke til kommentar

Det ser ut som om MySQL 4 støtter case, i så fall:

 

select a.*, case when b.bid is not null then 'TRUE' else 'FALSE' end
from tabellA a right outer join tabellB b on (
(a.aid = b.aid) and (b.bid = $bid)
)

 

Edit: Evt kan du se på IF ...

 

select a.*, if(b.bid is not null,'TRUE','FALSE')
from tabellA a right outer join tabellB b on (
(a.aid = b.aid) and (b.bid = $bid)
)

 

Det tas forbehold om småfeil, jeg jobber ikke med MySQL selv, jeg har bare tatt manualen fatt (så lærer jeg litt selv også).

Endret av roac
Lenke til kommentar

Den vil ikke fungere fordi den er avhengig av at tabell B inneholder brukerid. Hele poenget er at den skal gi FALSE der brukerid ikke finnes i tabell B, men samtidig liste opp innholdet av tabell A.

 

Forresten, hvordan får jeg koden i sql-ramme?

Lenke til kommentar
Den vil ikke fungere fordi den er avhengig av at tabell B inneholder brukerid. Hele poenget er at den skal gi FALSE der brukerid ikke finnes i tabell B, men samtidig liste opp innholdet av tabell A.

5571469[/snapback]

Bah. Left outer join skulle det stå :)

Lenke til kommentar
Da tror jeg faktisk den virker. Skal teste litt utover kvelden, men det ser bra ut. Takker og bukker. Skal lese mer på join jeg.

5572457[/snapback]

Joins er praktisk. Det gikk tydeligvis litt fort i svingene der siden jeg satte den gal vei, men slikt skjer :)

 

Fint at det ser ut til å virke, da har jeg gjort noe nyttig jeg også :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...