0 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)
ویرایش شده قبل توسط

چگونه می توان با استفاده از یک query لیست رکورد های تکراری یک جدول را بر اساس مقادیر یک یا چند ستون مشخص بدست آورد؟

قبل توسط (7.2هزار امتیاز)
چون باید از از توابع analytic استفاده کنید و این توابع معمولا به صورت DB specific می باشند فکر نکنم یک راه حل کاملا cross پیدا کنید.
قبل توسط (1.1هزار امتیاز)
منم فکر می کردم پیچیدس ولی با تابع count و having حل شد!

2 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)
ویرایش شده قبل توسط

اگر فرض کنیم مقادیر دو ستون col1 و col2 مشخص کننده تکراری بودن رکورد هستند، query به شکل زیر می شود:

SELECT
    col1, col2, COUNT(*)
FROM
    your_table
GROUP BY
    col1, col2
HAVING 
    COUNT(*) > 1

اگر ستون های مشخص کننده تکراری بودن رکورد بیشتر هستند، می تونید بجای  col1 و col2 نام تمامی آن ستون ها را بیاورید فقط باید در group by هم نام تمام آنها اضافه شود.

قبل توسط (1.1هزار امتیاز)
صورت سوال ویرایش شد.
قبل توسط (1.1هزار امتیاز)
در ضمن این مورد معمولا در مواردی پیش میاد که شما برروی یک یا چند ستون unique تعریف نکردین چون اگه تعریف کرده بودین که رکورد تکراری اضافه نمی شد.
+1 امتیاز
قبل توسط (7.2هزار امتیاز)

برای پیدا کردن مقادیر تکراری می توانید از group by استفاده نمایید. اما برای یافتن رکوردهایی که دارای مقادیر تکراری هستند می توانید با استفاده از یک left join با مقادیر تکراری آنها را پیدا کنید.

 

WITH a AS
     (SELECT 1 ID, 1 b, 1 c
        FROM DUAL
      UNION ALL
      SELECT 2, 2, 1
        FROM DUAL
      UNION ALL
      SELECT 3, 2, 1
        FROM DUAL
      UNION ALL
      SELECT 4, 3, 1
        FROM DUAL
      UNION ALL
      SELECT 5, 3, 1
        FROM DUAL
      UNION ALL
      SELECT 6, 3, 1
        FROM DUAL)
SELECT a.*
  FROM a
       LEFT JOIN
       (SELECT   MIN (ID) AS ID, b, c
            FROM a
        GROUP BY b, c) aa ON a.ID = aa.ID
 WHERE aa.ID IS NULL;


        ID          B          C
---------- ---------- ----------
         6          3          1
         5          3          1
         3          2          1


3 rows selected.

شما در بالا تمام رکوردهای تکراری را دارید و در زیر مقادیر تکراری را:

WITH a AS
     (SELECT 1 ID, 1 b, 1 c
        FROM DUAL
      UNION ALL
      SELECT 2, 2, 1
        FROM DUAL
      UNION ALL
      SELECT 3, 2, 1
        FROM DUAL
      UNION ALL
      SELECT 4, 3, 1
        FROM DUAL
      UNION ALL
      SELECT 5, 3, 1
        FROM DUAL
      UNION ALL
      SELECT 6, 3, 1
        FROM DUAL)
SELECT   b, c
    FROM a
GROUP BY b, c
  HAVING COUNT (*) > 1;


         B          C
---------- ----------
         2          1
         3          1


2 rows selected.

 

سوالات مشابه

0 امتیاز
0 پاسخ 1.1هزار بازدید
0 امتیاز
3 پاسخ 2.0هزار بازدید
+2 امتیاز
1 پاسخ 3.0هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط kashi (7.2هزار امتیاز)
0 امتیاز
2 پاسخ 1.4هزار بازدید
...