PDA

View Full Version : کمک در نوشتن دستور حذف برخی رکوردهای جدول با جوین



HDDSoft2001
شنبه 04 مهر 1388, 01:41 صبح
با سلام


دوستان من یک جدول دارم که دو فیلد آن کلیدی می باشند (البته کلید نیستند ولی با هم منحصر به فردند. بگذریم). دادهای این جدول زمانی ارزش دارند که این دو فیلد جدول با دوفیلد در جدول اصلی دیگر که ارتباط دارند پاک شود. چی گفتم.


ببینید من میخام رکوردهایی از جدول a پاک کنم که در جدول b نباشند. ارتباط این جداول هم دوفیلد هست که کلیدی هسنتد با هم به صورت ترکیبی.

Table a (id int, ssesion int);
Table b (id int, ssesion int);

یعنی اگر رکوردی در جدول دومی نباشد و رکورد متناظر ان هم در جدول اولی با این کوئری که قرار هست دوستان کمک کنند پاک شود.

آقا من که نفهمیدم چی گفتم چون اصلا نمیتونم بیان کنم چون تا حالا سروکار نداشتم. دوستان لطف کنید اگه منظورم رو فهمیدید توضیح درستشو بنویسید و دستور اس کیو ال اونو هم بنویسید.

در ضمن در باره ساختار هم بحث نکنید و فقط تمرکز روی دسور کوئری باشد. ممنون


با تشکر

محمد سلیم آبادی
شنبه 04 مهر 1388, 02:31 صبح
من میخام رکوردهایی از جدول a پاک کنم که در جدول b نباشند

delete a
where not exists (select *
from b
where id=a.id
and ssesion=a.ssesion)

HDDSoft2001
شنبه 04 مهر 1388, 04:52 صبح
با سلام

خیلی ممنونم از شما دوست عزیز ولی روش شما رو هم تست کردم اما در هر حالت همه رکوردها پاک میشه.(مشکل دارد)


درضمن جدول اول (فرعی) a تعداد چهار فیلد دارد و جدول دومی خیلی بیشتر می باشد. و همچنین نام هیچ یک از فیلدها در دو جدول یکسان نمی باشد و هیچ ارتباط (ریلیشن) بین آنها برقرار نمی باشد. ارتباط به طور کامل منطقی است.
این موارد را برای این گفتم که شبه ای نباشد. چون من دقیق exists را متوجه نشدم که از کجا می فهمه کدام رکورد هست.

با تشکر

محمد سلیم آبادی
شنبه 04 مهر 1388, 09:54 صبح
لطفا script دو جدول مذکور را پست پست کنید.

نام هیچ یک از فیلدها در دو جدول یکسان نمی باشد
ولی در نمونه جداولی که در پست اول قرار دادید این گونه نیست نه تعداد ستون ها متفاوت است و نه نام ستون ها.

HDDSoft2001
شنبه 04 مهر 1388, 14:30 عصر
با سلام

جدول اولی (a) :




CREATE TABLE [dbo].[ts_Log](
[Doc_ID] [int] NOT NULL,
[table_use] [tinyint] NOT NULL,
[Connection_ID] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL CONSTRAINT [DF_ts_Log_Client_ID] DEFAULT (N'@@SPID'),
[SPID] [nvarchar](20) COLLATE Arabic_CI_AS NOT NULL,
CONSTRAINT [PK_ts_Log] PRIMARY KEY CLUSTERED
(
[Doc_ID] ASC,
[table_use] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[ts_Log] WITH CHECK ADD CONSTRAINT [FK_ts_Log_ts_TableName] FOREIGN KEY([table_use])
REFERENCES [dbo].[ts_TableName] ([ID])
GO
ALTER TABLE [dbo].[ts_Log] CHECK CONSTRAINT [FK_ts_Log_ts_TableName]




جدول دوم ویوی sys.dm_exec_Connections می باشد.

ارتباط این جداول براساس ssesion_ID, Connection_ID در ویوی
sys.dm_exec_Connections می باشند با جدول ts_log با فیلدهای Connection_ID, SPID هست.

البته من دو ویو از هر جدول ساختم که سوتن های مشابه رو با ویو ایجاد کردم و جواب هم داد.
اما اگه راه حل ساده تر و بهتری به ذهنتان میرسید بفرمائید. خیلی ممنون.

با تشکر