Permalänk
Medlem

Hur ska min SQL-sats se ut?

Hej SweC!

Jag håller på med ett projekt i SQL/C# och har all C# kod klar. Jag har 3 olika knappar på interfacet/GUI, där man kan se vilka kunder som finns i databasen, vilka resor som finns, och min sista knapp där jag vill visa alla kunders resor.

Tabeller:

Customer: [ID] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (255) NOT NULL, [PIN] CHAR (11) NOT NULL, [Address] VARCHAR (255) NOT NULL, [Phone] VARCHAR (255) NOT NULL, PRIMARY KEY CLUSTERED ([ID] ASC) Booking: [Customer] INT NOT NULL, [Trip] INT NOT NULL, PRIMARY KEY CLUSTERED ([Customer] ASC, [Trip] ASC), FOREIGN KEY ([Customer]) REFERENCES [dbo].[Customer] ([ID]), FOREIGN KEY ([Trip]) REFERENCES [dbo].[Trip] ([ID]) Trip: [ID] INT IDENTITY (1, 1) NOT NULL, [Week] INT NOT NULL, [Year] INT NOT NULL, [Seats] INT NOT NULL, [Tour] INT NOT NULL, PRIMARY KEY CLUSTERED ([ID] ASC), CONSTRAINT [FKTour] FOREIGN KEY ([Tour]) REFERENCES [dbo].[Tour] ([ID]) Tour: [ID] INT IDENTITY (1, 1) NOT NULL, [Price] DECIMAL (18) NOT NULL, [DepartureTime] TIME (7) NOT NULL, [DepartureDay] VARCHAR (255) NOT NULL, [ArrivalTime] TIME (7) NOT NULL, [ArrivalDay] VARCHAR (255) NOT NULL, [From] VARCHAR (255) NOT NULL, [To] VARCHAR (255) NOT NULL, PRIMARY KEY CLUSTERED ([ID] ASC), CONSTRAINT [FKArrivalDay] FOREIGN KEY ([ArrivalDay]) REFERENCES [dbo].[Weekday] ([Name]), CONSTRAINT [FKDepartureDay] FOREIGN KEY ([DepartureDay]) REFERENCES [dbo].[Weekday] ([Name]), CONSTRAINT [FKFromCity] FOREIGN KEY ([From]) REFERENCES [dbo].[City] ([Name]), CONSTRAINT [FKToCity] FOREIGN KEY ([To]) REFERENCES [dbo].[City] ([Name])

och jag vill alltså visa ID, Name, Week, From, To med en select-sats. "SELECT ID, Name, Trip FROM dbo.Customer INNER JOIN dbo.Booking ON dbo.Customer.ID = dbo.Booking.Customer" men det saknas ju en del där och jag antar att man behöver flera inner joins, men lite osäker på hur det ska skrivas, och får det inte riktigt att fungera som tänkt.

Uppskattar all hjälp!

Permalänk
Avstängd

Booking är ju bara en referenstabell så du ska ju inte hämta något från den. Annars är det väl bara att joina tabellerna och välja ut det du vill ha i selecten liksom. Typ:

SELECT c.*, t.* FROM Customer c JOIN Booking b ON c.ID = b.Customer JOIN Trip t ON t.ID = b.Trip

Tabellen Tour hänger inte ihop med de övriga dock så den går ju inte att joina in som det ser ut nu.

Personligen tycker jag också att namngivning av externa nycklar bör vara samma i de olika tabellerna, det gör också att Intellisense funkar bättre (om man nu använder det). Typ som att tabellen (eller alla fält i tabellen) Customer har ett prefix som indikerar vilken tabell de tillhör, kanske cus eller så. Det gör det också tydligt vad som är externa nycklar och vilken tabell de refererar till. Då blir joinen istället:

FROM Customer c JOIN Booking b ON c.cusId = b.cusId JOIN Trip t ON t.triId = b.triId

Permalänk
Medlem
Skrivet av snajk:

Booking är ju bara en referenstabell så du ska ju inte hämta något från den. Annars är det väl bara att joina tabellerna och välja ut det du vill ha i selecten liksom. Typ:

SELECT c.*, t.* FROM Customer c JOIN Booking b ON c.ID = b.Customer JOIN Trip t ON t.ID = b.Trip

Tabellen Tour hänger inte ihop med de övriga dock så den går ju inte att joina in som det ser ut nu.

Personligen tycker jag också att namngivning av externa nycklar bör vara samma i de olika tabellerna, det gör också att Intellisense funkar bättre (om man nu använder det). Typ som att tabellen (eller alla fält i tabellen) Customer har ett prefix som indikerar vilken tabell de tillhör, kanske cus eller så. Det gör det också tydligt vad som är externa nycklar och vilken tabell de refererar till. Då blir joinen istället:

FROM Customer c JOIN Booking b ON c.cusId = b.cusId JOIN Trip t ON t.triId = b.triId

Jag har fått databasen av en polare, men håller med om att din namngivning är bättre och enklare att förstå. Stort tack för hjälpen, du fick mig i rätt riktning och jag har nu löst alla mina problem Tack!