Avatar billede juks Novice
15. december 2005 - 01:24 Der er 14 kommentarer og
1 løsning

Foreign key

hey
jeg har en tabel med nogle ingredienser.
hver ingrediens har en unit (kg/gram/stk) etc
den unit har jeg lavet i en ny tabel og så lavet en FOREIGN KEY fra ingredient tabellen til unit men når jeg så forespørger på ingredient_navn og unit.navn  gentager den posterne så jeg for 63 istedet for de 9 der i tabellen ingredient.
hvad gør jeg forkert
Avatar billede Slettet bruger
15. december 2005 - 05:57 #1
nu husker du en betingelse når du joiner ikke?

Ala:
select * from ingredient, unit where ingredient.unitId = unit.Id
Avatar billede juks Novice
15. december 2005 - 06:03 #2
men jeg skal have vist alle i tabellen ingredient.
men skal have vist unit.navn ikke ingredient.unitid. den skal lave et opslag i tabellen unit og hente navnet . troede man kunne lave det via en relation .
Avatar billede Slettet bruger
15. december 2005 - 06:11 #3
Det er ikke relationen der gør det. En FK er anvendes til check af referenciel integritet, check som at du ikke kan indsætte en unit værdi som ikke findes i tabellen med primær nøglen. Det har intet med udtræk at gøre, du kan joine ud relationer, relationer er kun til konsistens check.

Antager du har noget der ligner

Tabel ingredient
id
name
unit (antallet af enheder)
unitId (denne er FK til id i tabellen Units)

Tabel units
id
name

Måden at vise det på vil være :

SELECT ingredient.navn, ingredient.unit, units.name
FROM ingredient, units
WHERE ingredient.unitId = units.id

Ovenstående viser dig ingridiens navn, enhed og enhedsangivelse.
Avatar billede juks Novice
15. december 2005 - 06:12 #4
SELECT ingredient.navn, ingredient.units, ingredient.id, units.name
  FROM units
  JOIN ingredient ON units.id = ingredient.units
  ORDER BY ingredient.navn;
Avatar billede Slettet bruger
15. december 2005 - 06:15 #5
Ja, virker det ikke da?
Avatar billede juks Novice
15. december 2005 - 06:16 #6
jo men troede man kunne lave det kun med relationer
Avatar billede juks Novice
15. december 2005 - 06:18 #7
har gemt den som et wiew
Avatar billede juks Novice
15. december 2005 - 06:37 #8
er det korrekt eller
Avatar billede juks Novice
15. december 2005 - 06:43 #9
min tabel er sådan her


CREATE TABLE ingredientinventory
(
  ingredientid int4 NOT NULL DEFAULT 0,
  inventoryid int4 NOT NULL DEFAULT 0,
  stockmin int4 NOT NULL DEFAULT 0,
  CONSTRAINT ingredientinventory_pkey PRIMARY KEY (ingredientid, inventoryid),
  CONSTRAINT ingredientinventory_ingredientid_fkey FOREIGN KEY (ingredientid)
      REFERENCES ingredient (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT ingredientinventory_inventoryid_fkey FOREIGN KEY (inventoryid)
      REFERENCES inventory (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
)
WITHOUT OIDS;
Avatar billede juks Novice
15. december 2005 - 06:43 #10
hov glem lige den sidste dette her er tabellen


CREATE TABLE ingredient
(
  id serial NOT NULL,
  navn varchar(50) NOT NULL,
  unitprice numeric NOT NULL DEFAULT 0::numeric,
  stock int4 NOT NULL DEFAULT 0,
  units int4 NOT NULL DEFAULT 0,
  CONSTRAINT ingredient_pkey PRIMARY KEY (id, units),
  CONSTRAINT ingredient_units_fkey FOREIGN KEY (units)
      REFERENCES units (id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT ingredient_id_key UNIQUE (id)
)
WITHOUT OIDS;
ALTER TABLE ingredient OWNER TO dm26;
Avatar billede Slettet bruger
15. december 2005 - 07:50 #11
Du kan som sagt ikke lave noget med "relationer" der er ikke rigtigt noget som hedder relationer, som kan definerer. Der kan definerer referencial integritet, som ofte opfattes som relationer, men der er ingen automatik i forhold til udtræk.

Det du ønsker skal laves med et join. Og det join kunne jo være et View hvis du ønsker at kunne tilgå det direkte uden selv at skulle lave join hvergang.
Avatar billede juks Novice
15. december 2005 - 07:51 #12
ok
Avatar billede Slettet bruger
17. december 2005 - 07:59 #13
Kom du videre ??
Avatar billede juks Novice
17. december 2005 - 13:41 #14
jeps bare smid et svar
Avatar billede Slettet bruger
18. december 2005 - 05:36 #15
svar
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