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

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

  1. #1

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

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


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

    سپاس
    یا علی

  2. #2
    کاربر دائمی آواتار رسول_57
    تاریخ عضویت
    تیر 1386
    محل زندگی
    تهران
    پست
    218

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

    با سلام

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

    1-یکی از بهترین روش ها Join کردن جدول با خودش است مانند مثال زیر :


    select
    book_unique_id,
    page_seq_nbr,
    image_key
    from
    page_image a
    where
    rowid >
    (select min(rowid) from page_image b
    where
    b.key1 = a.key1
    and
    b.key2 = a.key2
    and
    b.key3 = a.key3
    );





    2-به نظرم از تابع Rank نیز می توان برای این کار استفاده کرد، مانند مثال زیر :


    delete from $table_name where rowid in
    (
    select "rowid" from
    (select "rowid", rank_n from
    (select rank() over (partition by $primary_key order by rowid) rank_n, rowid as "rowid"
    from $table_name
    where $primary_key in
    (select $primary_key from $table_name
    group by $all_columns
    having count(*) > 1
    )
    )
    )
    where rank_n > 1
    )
    آخرین ویرایش به وسیله رسول_57 : یک شنبه 25 مهر 1395 در 11:02 صبح

  3. #3

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

    سلام

    بسیار سپاسگذارم جناب رسول بابت راهنمایی تان؛

  4. #4

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

    نقل قول نوشته شده توسط رسول_57 مشاهده تاپیک
    با سلام

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

    1-یکی از بهترین روش ها Join کردن جدول با خودش است مانند مثال زیر :


    select
    book_unique_id,
    page_seq_nbr,
    image_key
    from
    page_image a
    where
    rowid >
    (select min(rowid) from page_image b
    where
    b.key1 = a.key1
    and
    b.key2 = a.key2
    and
    b.key3 = a.key3
    );





    2-به نظرم از تابع Rank نیز می توان برای این کار استفاده کرد، مانند مثال زیر :


    delete from $table_name where rowid in
    (
    select "rowid" from
    (select "rowid", rank_n from
    (select rank() over (partition by $primary_key order by rowid) rank_n, rowid as "rowid"
    from $table_name
    where $primary_key in
    (select $primary_key from $table_name
    group by $all_columns
    having count(*) > 1
    )
    )
    )
    where rank_n > 1
    )

    ببخشید یک سوال دیگر هم داشتم:
    چطور می توان سطر های یک resultset را که به وسیله دستور ordered by مرتب شده update کرد؟

  5. #5
    کاربر دائمی آواتار رسول_57
    تاریخ عضویت
    تیر 1386
    محل زندگی
    تهران
    پست
    218

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

    با سلام

    اگر بتوانید به زبان Pl/SQL برنامه بنویسید و اگر بنده منظور شما را درست فهمیده باشم ، مبحثی به نام (CQN (Continuous Query Notification در اوراکل وجود دارد که شما می توانید یک یا چند جدول را نشانه گذاری کنید تا هر تغییری در آن رخ می دهد به شما اعلام نماید و به راحتی نتایج هر کوئری را به روز رسانی کند . اگر خواستید جستجویی بنمایید و اگر مشکلی بود بنده در حد بضاعت در خدمتم .

  6. #6

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

    نقل قول نوشته شده توسط رسول_57 مشاهده تاپیک
    1-یکی از بهترین روش ها Join کردن جدول با خودش است مانند مثال زیر :


    select
    book_unique_id,
    page_seq_nbr,
    image_key
    from
    page_image a
    where
    rowid >
    (select min(rowid) from page_image b
    where
    b.key1 = a.key1
    and
    b.key2 = a.key2
    and
    b.key3 = a.key3
    );
    سلام؛
    جناب رسول عزیز، اگر امکان دارد دوباره می خواستم مزاحمتان شوم.
    در کدهای نوشته شده در بالا، اگر key1,key2 یا key3 مقادیر null داشته باشند برنامه نمی تواند رکوردهای یکسان را تشخیص دهد. چه کار باید بکنم؟

    ========

    یک سوال دیگر هم داشتم،
    من الان رکورد ها را یک بار select می کنم
    بعد علامت می زنم
    بعد پاک می کنم.

    اگر بخواهم برنامه را طوری تغییر دهم که یک باره delete کند باید چه کار کنم؟
    یعنی به جای آن کد ابتدایی select کد delete قرار بگیرد یا مثلا بنویسم:

    delete from table where col1 in
    (select
    ...
    (


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

    ===========ویرایش=======
    مشکلم برطرف شد. برنامه را باید این طور می نوشتم:

    select * from TICKERS a
    where rownumber >
    (select min(rownumber) from TICKERS b where
    b.NAME = a.NAME
    and (b.price = a.PRICE or (b.price is null and a.price is null))
    and (b.volume = a.volume or (b.volume is null and a.volume is null))
    );

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



    یا علی
    ===========پایان ویرایش========
    آخرین ویرایش به وسیله mhjbarnamenevis : جمعه 07 آبان 1395 در 23:17 عصر

  7. #7
    کاربر دائمی آواتار رسول_57
    تاریخ عضویت
    تیر 1386
    محل زندگی
    تهران
    پست
    218

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

    با سلام

    ممنون بابت لطفتان . اما در مورد سوال دومتان خیلی راحت می توان از دستور delete به جای Select استفاده کرد . نیاز به دو مرحله کردن کارها نیست . هر چند لزوما با توجه به قانون جامعیت ارجاعی ممکن است رکوردهایی که حذف می گردد با رکوردهایی که در مرحله اول انتخاب گردید یکسان نباشد.

    با تشکر
    آخرین ویرایش به وسیله رسول_57 : شنبه 08 آبان 1395 در 21:18 عصر

تاپیک های مشابه

  1. حذف رکورد های تکراری بر اساس فقط یک فیلد
    نوشته شده توسط majidrezaei2007 در بخش C#‎‎
    پاسخ: 9
    آخرین پست: سه شنبه 24 مرداد 1391, 14:09 عصر
  2. سوال: حذف رکورد های تکراری
    نوشته شده توسط علیرضا حسن زاده در بخش SQL Server
    پاسخ: 1
    آخرین پست: یک شنبه 27 تیر 1389, 13:06 عصر
  3. سوال: حذف رکورد های تکراری
    نوشته شده توسط hamed.rezaei در بخش SQL Server
    پاسخ: 10
    آخرین پست: دوشنبه 19 بهمن 1388, 15:58 عصر
  4. حذف ركورد هاي تكراري در يك جدول
    نوشته شده توسط tanha_nabash در بخش SQL Server
    پاسخ: 3
    آخرین پست: جمعه 17 مهر 1388, 00:07 صبح
  5. حذف رکورد های تکراری
    نوشته شده توسط error500 در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: شنبه 11 آبان 1387, 02:05 صبح

برچسب های این تاپیک

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

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