نمایش نتایج 1 تا 9 از 9

نام تاپیک: حذف رکوردهای تکراری

  1. #1

    حذف رکوردهای تکراری

    یه سوال ساده:

    تیبلهای tbl_1 , tbl_2 رو در نظر بگیرین.
    tbl_1 دارای 4 تا رکورد هست: 1و2و3و4
    tbl_2 دارای 8 رکورد هست: 1و2و3و4و5و6و7و8

    چطوری میشه رکوردهای tbl_1 را (1و2و3و4) از tbl_2 حدف کرد؟

  2. #2

    نقل قول: حذف رکوردهای تکراری

    منظورتان در نمایش است یا کلا Delete کرد:


    set nocount on
    declare @tbl1 table(a int)
    declare @tbl2 table(a int)
    insert @tbl1 values (1)
    insert @tbl1 values (2)
    insert @tbl1 values (3)
    insert @tbl2 values(1)

    select * from @tbl1
    except
    select * from @tbl2


    delete @tbl1
    where a in
    (
    select a from @tbl1
    intersect
    select a from @tbl2
    )






    برای اطلاعات بیشتر به پست "Interscect Without INTERSECT" وبلاگم سر بزنید.
    آخرین ویرایش به وسیله محمد سلیم آبادی : چهارشنبه 25 شهریور 1388 در 12:23 عصر
    وبلاگ من (Advanced SQL Querying)

  3. #3

    نقل قول: حذف رکوردهای تکراری

    ممنون از شما
    مثالی که من زدم فقط یه "مثال" بود. من تو tbl2 بیش از 8000 رکورد دارم که 2000 تا از اون تو tbl1 هم وجود دارند و میخواهم این رکوردهای تکراری tbl2 رو حدف کنم.
    ضمنا دستوراتی که نوشتین تو SQL ارور میده

    بازم ممنون

  4. #4

    نقل قول: حذف رکوردهای تکراری

    برای حذف کردن داده های مشترک/تکراری شما اجبار به مقایسه ی سطرهای دو جدول دارید، که این مقایسه به همان روشی است که در پست اولم ارسال کردم.

    اررو دادن به احتمال زیاد مال این است که از SQL Server 2000 استفاده می کنید. اگر اینطور باشد به جای عملگرهای مجموعه ای می توانید از شبیه سازی شده های آن با کمک union بهره ببرید که در همان مقاله ای که گفتم این کار صورت گرفته است.
    من این دستورات را در Engin 2008 اجرا کردم سپس پست کردم.

    تعداد سطر زیاد مهم نیست، فقط هرچی بیشتر باشد زمان بیشتری برای پردازش احتیاج دارد.
    وبلاگ من (Advanced SQL Querying)

  5. #5

    نقل قول: حذف رکوردهای تکراری

    نيازي به اشتراک گيري نيست همان IN به تنهايي, عملا فقط مشترکها را بر مي گرداند :
    به شکل زير

    delete @tbl1
    where a in (select a from @tbl2)

  6. #6

    نقل قول: حذف رکوردهای تکراری

    نقل قول نوشته شده توسط بهنام بهمنی مشاهده تاپیک
    نيازي به اشتراک گيري نيست همان IN به تنهايي, عملا فقط مشترکها را بر مي گرداند :
    به شکل زير

    delete @tbl1
    where a in (select a from @tbl2)
    این موضوع را می دانم.

    اگر از subquery مستقیما استفاده کنیم به تعداد سطر جدول اول ما باید جستجو در تعداد سطر جدول دوم انجام بدهیم. ولی اگر در subquery تنها اشتراکات را قرار دهیم در هر بار جستجو تنها از لیست محدود مشترکات بررسی صورت می گیرد.

    مثلا اگر در جدول دوم 20 هزار سطر وجود داشته باشد و اشتراک آن جدول با جدول اول 2 هزار باشد. ما با داشتن اشتراک آنها تنها در 2000 سطر جستجو خواهیم داشت در غیر اینصورت باید در تعداد 20 هزار سطر برای هر سطر جدول اول جستجو کنیم.
    وبلاگ من (Advanced SQL Querying)

  7. #7

    نقل قول: حذف رکوردهای تکراری

    حرف شما کاملا صحيح است به شرطي که جدول بيروني چيزي جداي از دو جدول داخلي باشد مثلاِ کد زير

    Delete tbl3 a in
    (
    select a from @tbl1
    intersect
    select a from @tbl2
    )
    ام در حال حاضر چون دو جدول يکي هستند, به نظر مي رسد همان يک In کافي باشد.

  8. #8

    نقل قول: حذف رکوردهای تکراری

    به هر حال برای زیبایی کار و علاقه به عملگر های مجموعه ای (Set Operation) این کار را انجام داده ام.
    وبلاگ من (Advanced SQL Querying)

  9. #9

    نقل قول: حذف رکوردهای تکراری

    شما کارت درسته

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •