本帖最后由 a276202031 于 2014-03-04 14:04:59 编辑

解决方案 »

  1.   

    我感觉可以通过ascii码值得总和来判断是否相等。但是没想好如何计算ascii码总和?
      

  2.   

    想了想  有点困难唉,楼上说的ascii码也不太可行,有巧合性。REGEXP_SUBSTR 用这个好像也不太靠谱,感觉会很麻烦,目前一个sql可能搞不定吧! 坐等其他大神回复
      

  3.   

    一个SQL貌似不行吧?写一个函数?
      

  4.   

     ascii码求和 不现实 
      

  5.   

    今天试了下 可以是可以 就是看起来麻烦了:WITH T AS
     (SELECT 1 PID, 'a,b' FMODEL, 'b,a' SMODEL FROM DUAL
      UNION ALL
      SELECT 2 PID, 'a,b,c' FMODEL, 'c,a,b' SMODEL FROM DUAL
      UNION ALL
      SELECT 3 PID, 'a,c,d' FMODEL, 'c,a,b' SMODEL FROM DUAL)
    SELECT *
      FROM T
     WHERE NOT EXISTS
     (SELECT 1
              FROM (SELECT PID, REGEXP_SUBSTR(FMODEL, '[^,]+', 1, LEVEL) FMODEL
                      FROM T
                    CONNECT BY LEVEL <=
                               LENGTH(FMODEL) - LENGTH(REPLACE(FMODEL, ',', '')) + 1
                           AND PID = PRIOR PID
                           AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
                    MINUS
                    SELECT PID, REGEXP_SUBSTR(SMODEL, '[^,]+', 1, LEVEL) SMODEL
                      FROM T
                    CONNECT BY LEVEL <=
                               LENGTH(SMODEL) - LENGTH(REPLACE(SMODEL, ',', '')) + 1
                           AND PID = PRIOR PID
                           AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL) T1
             WHERE T1.PID = T.PID)
    11g中可以把LENGTH(FMODEL) - LENGTH(REPLACE(FMODEL, ',', '')) + 1换成REGEXP_COUNT(FMODEL, ',') + 1
      

  6.   

    这样还是 不对,你这样只检索了  FMODEL中的字符 是否全部包含在 SMODEL 中  还应该加个条件 length(SMODEL)=length(FMODEL)
      

  7.   

    这样还是 不对,你这样只检索了  FMODEL中的字符 是否全部包含在 SMODEL 中  还应该加个条件 length(SMODEL)=length(FMODEL)恩 是的 length相等 是大前提了,length都不相等的话 ,还比较个球球- -,那可以先子查询掉
      

  8.   

    WITH T AS
     (SELECT 1 PID, 'a,b' FMODEL, 'b,a' SMODEL FROM DUAL
      UNION ALL
      SELECT 2 PID, 'a,b,c' FMODEL, 'c,a,b' SMODEL FROM DUAL
      UNION ALL
      SELECT 3 PID, 'a,c,d' FMODEL, 'c,a,b' SMODEL FROM DUAL)
    SELECT *
      FROM T
     WHERE NOT EXISTS
     (SELECT 1
              FROM (SELECT PID, REGEXP_SUBSTR(FMODEL, '[^,]+', 1, LEVEL) FMODEL
                      FROM T
                    CONNECT BY LEVEL <=
                               LENGTH(FMODEL) - LENGTH(REPLACE(FMODEL, ',', '')) + 1
                           AND PID = PRIOR PID
                           AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
                    MINUS
                    SELECT PID, REGEXP_SUBSTR(SMODEL, '[^,]+', 1, LEVEL) SMODEL
                      FROM T
                    CONNECT BY LEVEL <=
                               LENGTH(SMODEL) - LENGTH(REPLACE(SMODEL, ',', '')) + 1
                           AND PID = PRIOR PID
                           AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL) T1
             WHERE T1.PID = T.PID) AND LENGTH(SMODEL)=LENGTH(FMODEL)  
    这样OK