Hjælp til forespørgsel.

Tags:    databaser

Efter 3. normalform er der kommet en ny tabel ud fra tabellerne Kunder og Leverandører, nemlig ByPostNr. Tabellen ByPostNr inderholder postnr, by og region. Region bliver bestemt ud fra, hvilket postnr man har. Mit spørgsmål lyder på, hvordan man laver en forespørgsel, som sammenligner om Kunden bor i samme region som leverandøren? Problemet er, at tabellerne Kunder og Leverandører refererer til samme tabel, nemlig byPostNr til at få oplyst, hvilken region de bor i. Man skal vel kigge på, hvilket postnr kunden har og derudfra finde frem til regionen. Det samme med leverandør. Til sidst skal de sammenlignes.


CREATE TABLE Kunder (
kNavn CHAR (100) NOT NULL,
kVej CHAR (200) NOT NULL,
kHusnummer INT NOT NULL,
kPostNr CHAR (4) NOT NULL,
kKundeID CHAR (5) NOT NULL,
PRIMARY KEY (kKundeID),
CONSTRAINT fk_kunde_byPostNr FOREIGN KEY (kPostNr) REFERENCES ByPostNr,
);

CREATE TABLE Leverandører (
levFirmaNavn CHAR (100) NOT NULL,
levVej CHAR (200) NOT NULL,
levHusnummer INT NOT NULL,
levPostNr CHAR (4) NOT NULL,
LeverandørID CHAR (5) NOT NULL,
PRIMARY KEY (leverandørID),
CONSTRAINT fk_leverandør_byPostNr FOREIGN KEY (levPostNr) REFERENCES ByPostNr
);

CREATE TABLE ByPostNr (
bPostNr CHAR (4) NOT NULL,
bByNavn CHAR (100) NOT NULL,
bRegion TINYINT NOT NULL,
PRIMARY KEY (bPostNr),
CONSTRAINT regiondel CHECK (bRegion BETWEEN 1 AND 8)
);



3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato

Hvis jeg har forstået det korrekt, vi du så have at din SQL forespørgsel skal returnere et Boolsk resultat, altså true/false ?

Det er ikke muligt for en SQL Statement at returnere andet end et resultatsæt, også selvom dette resultatsæt kun vil indeholde et enkelt svar (true eller false).

Der må eksistere noget kode udenfor denne sql som kan slå en kunde op i tabellen og så returnere regionen. Den samme funktionalitet kan også slå leverandøren op og så herefter matche regionerne, rent kodemæssigt.

Alternativt kan du, lt efter hvilken SQL dialekt du benytter lave en forespørgsel der ved hjælp af parametre og eventuelt stored procedures kan returnere 0 eller 1 som resultater for en sådan forespørgsel.

Hvad ønsker du at din SQL statement skal returnere ?


(¯`·._.·[Brian Hvarregaard]·._.·´¯)





[Redigeret d. 26/05-04 11:52:55 af Brian Hvarregaard]



Er der tale om en Microsoft SQL Server eller mySQL ? Det er muligt hvis du anvender f.eks. Stored Procedures på en MS SQL Server at få returneret en boolsk værdi fra en forespørgsel. Jeg vil gerne komme med et eksempel, hvis det er en MS SQL Server du bygger dit program på?

Mvh. Thomas Lykke Petersen



Jeg har fundet ud, hvordan det skulle løses, se nedenstående. Ellers tak for hjælpen.

select kKundeID, kNavn, kPostNr, vVareNavn, vPris, levFirmaNavn, leverandørID, levPostNr
from Varer, Kunder k inner join ByPostNr b1
on k.kPostNr = b1.bPostNr
inner join ByPostNr b2
on b1.bRegion = b2.bRegion
inner join leverandører l
on l.levpostnr = b2.bPostNr
WHERE k.kKundeID = '23118' AND Varer.vVareNavn = 'rive træ'
ORDER BY Varer.vPris

[Redigeret d. 27/05-04 17:59:40 af Michael]



t