سلام.
مطابق شکل زیر, فرض کنیم دیتابیس از یک جدول اصلی , یک جدول نویسندگان و چندین جدول که هر کدام مربوط به کتابهای چاپی هر ناشر میباشد, تشکیل شده است. از افزونگی در جدول نویسندگان چشم پوشی میکنیم. در جدول اصلی, آی دی جدول نویسندگان و آی دی جدول ناشر (که فیلد نام ناشر از جدول نویسندگان تعیین میکند که از کدام جدول ناشر آی دی گرفته شود) ذخیره می شود. حال میخواهیم جستجو را طوری طراحی کنیم که شامل موارد زیر باشد:
1. آی دی جدول الی
2. نام نویسنده
3. نام خانوادگی نویسنده
4. نام ناشر
5. نام کتاب
کوئری اس کیو ال مورد نظر رو چطور باید نوشت؟
آیا راه حل بهینه تری وجود دارد؟
با سلام جدول مورد نظر شما می بایست به شکل زیر باشد ، براتون همین تصویر رو ضمیمه می کنم و کد اسکریپت رو هم براتون در پایین تصویر قرار می دهم :
USE [dbBookTest] GO /****** Object: Table [dbo].[Authors] Script Date: 10/12/2015 07:34:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Authors]( [AuthorID] [int] IDENTITY(1,1) NOT NULL, [AuthorFirstName] [nvarchar](500) NULL, [AuthorLastName] [nvarchar](500) NULL, CONSTRAINT [PK_Authors] PRIMARY KEY CLUSTERED ( [AuthorID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Publishers] Script Date: 10/12/2015 07:34:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Publishers]( [PublisherID] [int] IDENTITY(1,1) NOT NULL, [PublisherName] [nvarchar](500) NOT NULL, CONSTRAINT [PK_Publishers] PRIMARY KEY CLUSTERED ( [PublisherID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Bookes] Script Date: 10/12/2015 07:34:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Bookes]( [BookID] [int] IDENTITY(1,1) NOT NULL, [AuthorID] [int] NOT NULL, [PublisherID] [int] NOT NULL, [BookName] [nvarchar](500) NOT NULL, CONSTRAINT [PK_Bookes] PRIMARY KEY CLUSTERED ( [BookID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: ForeignKey [FK_Bookes_Authors] Script Date: 10/12/2015 07:34:21 ******/ ALTER TABLE [dbo].[Bookes] WITH CHECK ADD CONSTRAINT [FK_Bookes_Authors] FOREIGN KEY([AuthorID]) REFERENCES [dbo].[Authors] ([AuthorID]) GO ALTER TABLE [dbo].[Bookes] CHECK CONSTRAINT [FK_Bookes_Authors] GO /****** Object: ForeignKey [FK_Bookes_Publishers] Script Date: 10/12/2015 07:34:21 ******/ ALTER TABLE [dbo].[Bookes] WITH CHECK ADD CONSTRAINT [FK_Bookes_Publishers] FOREIGN KEY([PublisherID]) REFERENCES [dbo].[Publishers] ([PublisherID]) GO ALTER TABLE [dbo].[Bookes] CHECK CONSTRAINT [FK_Bookes_Publishers] GO
کوئری مورد نظر شما هم جهت گرفتن اطلاعات فوق به صورت زیر می باشد :
Select a.AuthorFirstName, a.AuthorLastName, p.PublisherName, b.BookName From Bookes as b Full Join Authors as a On b.AuthorID = a.AuthorID Full Join Publishers as p On b.PublisherID = p.PublisherID Order by a.AuthorFirstName
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)