2012-01-12, 15:14
  #1
Medlem
Håller på med en databas i access 2007, och har lite problem!

Jag vill skriva en fråga som tar fram alla Poster som är icke i bockade i en tabell
Jag har alltså en kolumn i en tabell som heter Avslutad som man bockar i om den är avslutad.

Då vill jag kunna skriva en fråga, som genererar alla de poster som är oavslutade (Ej i bockade)


Är hemskt dålig på SQL, men här är något slags logiskt försök:

Select annons.avslutad
FROM annons
when annons.avslutad = 'false' (inte i bockad i rutan)

Hur ska man skriva frågan för att få fram de "oavslutade" posterna jag vill få fram?
Citera
2012-01-12, 15:36
  #2
Medlem
valter-eggons avatar
[PHP]Select *
FROM annons
where avslutad = 0
OR avslutad is NULL[/PHP]
Skulle jag chansa på. Det är alltid lite olika beteende i olika databaser känns det som när man jobbar med boolean-värden.
Citera
2012-01-12, 15:54
  #3
Medlem
Det stämde bra vad jag kan se! Tackar!

Om jag vill hämta information från en annan tabell i samma fråga, är det bara att lägga till då? Eller måste jag nestla med en fråga i frågan?

Vill alltså få ut Information ifrån en tabell som heter Leverantör som beror den oavslutade posten
Citera
2012-01-12, 18:35
  #4
Medlem
valter-eggons avatar
Citat:
Ursprungligen postat av Hooyah
Det stämde bra vad jag kan se! Tackar!

Om jag vill hämta information från en annan tabell i samma fråga, är det bara att lägga till då? Eller måste jag nestla med en fråga i frågan?

Vill alltså få ut Information ifrån en tabell som heter Leverantör som beror den oavslutade posten
Om det finns något att joina på så går det. Låt säga att du har en kolumn i Annons som heter leverantor_id så kan du göra:
[PHP]SELECT * FROM Annons, Leverantor
WHERE Annons.leverantor_id=Leverantor.leverantor_id
AND (Annons.avslutad = 0
OR Annons.avslutad is NULL)[/PHP]

Då får du ut alla kolumner ur båda tabellerna.

Vill du bara ha vissa kolumner så skriver du:
[PHP]SELECT Annons.namn, Annons.start_datum, Annons.slut_datum, Leverantor.namn, Leverantor.org_nr FROM Annons, Leverantor
WHERE Annons.leverantor_id=Leverantor.leverantor_id
AND (Annons.avslutad = 0
OR Annons.avslutad is NULL)[/PHP]
Annons.namn, Annons.start_datum, Annons.slut_datum, Leverantor.namn, Leverantor.org_nr är ju bara exempel på vilka kolumner du kanske har i tabellerna. Tabellnamn.EttKolumnnamn, Tabellnamn.EttAnnatKolumnnamn osv.
Citera
2012-01-16, 17:42
  #5
Medlem
Citat:
Ursprungligen postat av valter-eggon
Om det finns något att joina på så går det. Låt säga att du har en kolumn i Annons som heter leverantor_id så kan du göra:
[PHP]SELECT * FROM Annons, Leverantor
WHERE Annons.leverantor_id=Leverantor.leverantor_id
AND (Annons.avslutad = 0
OR Annons.avslutad is NULL)[/PHP]

Då får du ut alla kolumner ur båda tabellerna.

Vill du bara ha vissa kolumner så skriver du:
[PHP]SELECT Annons.namn, Annons.start_datum, Annons.slut_datum, Leverantor.namn, Leverantor.org_nr FROM Annons, Leverantor
WHERE Annons.leverantor_id=Leverantor.leverantor_id
AND (Annons.avslutad = 0
OR Annons.avslutad is NULL)[/PHP]
Annons.namn, Annons.start_datum, Annons.slut_datum, Leverantor.namn, Leverantor.org_nr är ju bara exempel på vilka kolumner du kanske har i tabellerna. Tabellnamn.EttKolumnnamn, Tabellnamn.EttAnnatKolumnnamn osv.

Får inte den övre koden att funka, kommer upp rutor som vill att jag ska mata in data.
Tror allt stämmer i kolumnerna/relationer
Citera
2012-01-16, 18:00
  #6
Medlem
valter-eggons avatar
[PHP]SELECT * FROM Annons, Leverantor
WHERE Annons.leverantor_id=Leverantor.leverantor_id
AND (Annons.avslutad = 0
OR Annons.avslutad is NULL)[/PHP]
Annons.leverantor_id=Leverantor.leverantor_id var bara menat som ett exempel. För att exemplet ska funka så måste du ha en kolumn som heter leverantor_id i båda tabellerna.

Annons borde rimligtvis ha en främmande nyckel till Leverantör eftersom en annons antagligen bara har en leverantör men en leverantör kan ha flera annonser.

Vilken kolumn har du i Annons som pekar ut leverantören?
Citera
2012-01-16, 18:22
  #7
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av Hooyah
Får inte den övre koden att funka, kommer upp rutor som vill att jag ska mata in data.
Tror allt stämmer i kolumnerna/relationer
Oj... Nu känner jag mig tvungen att bekänna en sak

Jag lånade valter-eggons spåkula häromdagen, men jag råkade tappa den i golvet Så tyvärr kan varken h*n eller jag se vad det är för data du ska mata in. Vore tacksam om du tills vidare kunde berätta vad det handlar om för rutor, har tyvärr inte råd att ersätta spåkulan förrän den 25:e.

Men att du skulle behöva mata in data i samband med en SELECT-sats låter rent allmänt mysko, förmodligen bor det troll i systemet. Men det är väl iofs allmänt känt att Access skapades av just troll och hittades under en gran nån gång på 1700-talet.

Vad händer om du gör en explicit inner join istället för implicit?
Citera
2012-01-16, 18:48
  #8
Medlem
valter-eggons avatar
Citat:
Ursprungligen postat av gadzoox
Oj... Nu känner jag mig tvungen att bekänna en sak

Jag lånade valter-eggons spåkula häromdagen, men jag råkade tappa den i golvet Så tyvärr kan varken h*n eller jag se vad det är för data du ska mata in. Vore tacksam om du tills vidare kunde berätta vad det handlar om för rutor, har tyvärr inte råd att ersätta spåkulan förrän den 25:e.

Men att du skulle behöva mata in data i samband med en SELECT-sats låter rent allmänt mysko, förmodligen bor det troll i systemet. Men det är väl iofs allmänt känt att Access skapades av just troll och hittades under en gran nån gång på 1700-talet.

Vad händer om du gör en explicit inner join istället för implicit?
Haha!

I och med att han tog min SQL bokstavligt så har jag för mig att Access kan få för sig sådana saker som att man måste mata in värden på saker den själv inte fattar. I detta fall leverantor_id som jag höftade till med.
Citera
2012-01-16, 20:24
  #9
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av valter-eggon
Haha!

I och med att han tog min SQL bokstavligt så har jag för mig att Access kan få för sig sådana saker som att man måste mata in värden på saker den själv inte fattar. I detta fall leverantor_id som jag höftade till med.
Haha vad fan är det för fasoner? Vore det inte bättre om skiten kastade ur sig ett felmeddelande istället, typ "Invalid column name 'leverantor_id'"?
Citera
2012-01-16, 20:57
  #10
Medlem
valter-eggons avatar
Citat:
Ursprungligen postat av gadzoox
Haha vad fan är det för fasoner? Vore det inte bättre om skiten kastade ur sig ett felmeddelande istället, typ "Invalid column name 'leverantor_id'"?
Ja absolut bättre men det har väl aldrig varit målet med Access?
Citera
2012-01-17, 16:57
  #11
Medlem
macka-pärs avatar
Citat:
Ursprungligen postat av gadzoox
Haha vad fan är det för fasoner? Vore det inte bättre om skiten kastade ur sig ett felmeddelande istället, typ "Invalid column name 'leverantor_id'"?

Det normala i Access är att okända kolumnnamn tolkas som parametrar när man kör frågan.

Och implicit join funkar inte i Access egen SQL-motor.
Citera
2012-01-17, 16:59
  #12
Medlem
Citat:
Ursprungligen postat av valter-eggon
[PHP]SELECT * FROM Annons, Leverantor
WHERE Annons.leverantor_id=Leverantor.leverantor_id
AND (Annons.avslutad = 0
OR Annons.avslutad is NULL)[/PHP]
Annons.leverantor_id=Leverantor.leverantor_id var bara menat som ett exempel. För att exemplet ska funka så måste du ha en kolumn som heter leverantor_id i båda tabellerna.

Annons borde rimligtvis ha en främmande nyckel till Leverantör eftersom en annons antagligen bara har en leverantör men en leverantör kan ha flera annonser.

Vilken kolumn har du i Annons som pekar ut leverantören?

Fattade exemplet, och ändrade i koden till:

SELECT *
FROM Annons, Leverantör
WHERE Annons.Lev_ID=Leverantor.Lev_ID And (Annons.avslutad=0 Or Annons.avslutad Is Null);

Annons och leverantör innehåller varsin koloumn med namnet Lev_ID. En till många samband precis som du nämner.
När jag kör denna fråga får jag inte ut någon data ur huvudtaget, fast det finns både avslutade och oavslutade annonser i databasen.
Vart gör jag fel?
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in