none
求 sql语句 RRS feed

  • 问题

  • 求一条sql语句, 表a,表b,  两个表中有相同的ID ,但两个表中都有重复的记录但重复的次数不同, 查出 表a 与 表b ID相同 ,表a 的记录重复次数与  表b的记录重复次数 相等的数据

     

    谢谢

    • 已移动 孟宪会 2010年10月26日 12:37 (发件人:.NET Framework 一般性问题讨论区)
    2010年10月26日 5:17

答案

全部回复

  • 你好
    或者你可以嘗試以下的方法

    SELECT A.ID, A.NoOfRecord, B.ID AS B_ID, B.NoOfRecord AS B_NoOfRecords
    FROM (SELECT ID, COUNT(*) AS NoOfRecord FROM TableA GROUP BY ID) A
    INNER JOIN (SELECT ID, COUNT(*) AS NoOfRecord  FROM TableB GROUP BY ID) B 
    ON A.ID = b.ID AND A.NoOfRecord = B.NoOfRecord

    Please correct me if my concept is wrong


    Chi
    2010年10月26日 6:10
  • 现在的情况是,没有主键,   表a  中 bID  与 表b中的bID  , 两个表中的bID 的数据有的是重复的,  现在要查出  两个表的bID字段 值相等,表a中记录的重复次数与 表b中记录的 重复次数 相等

     

    2010年10月26日 8:54
  • 你好

    當你執行上面的SQL 時結果是怎樣的?

    可不可以我會們一些SAMPLE 數據1?

    你的問題是
    要找出 A中的ID 和 B中的 ID 重複出現的 資數相等的 RECORD ?

     

    Please correct me if my concept is wrong?


    Chi
    2010年10月26日 10:38
  • with tempA
    as
    (
     select id,count(*) as number from a group by id
    ),
     tempB
    as
    (
     select id,count(*) as number from b group by id
    ),
    tempC
    as
    (
    select tempA.ID from tempA where exists(select 1 from tempB where tempA.id=tempB.id and tempA.number=tempb.number)
    )
    select * from a where ID in (select ID from tempC)
    
    

    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年10月26日 14:12
    版主
  • 以上两位给出的语句, 查出的结果都不是我想要的结果 ,可能没有理解小弟的意思

    表A                          

    bID
    20716
    20716
    20716
    20716
    22058
    31927
    31927
    32975

    表B

    bID
    20716
    20716
    22058
    31927
    32975

    查出 表A中bID的字段值 在 表B 中bID字段值 相同 的记录,同时 重复次数 以表B为准

    谢谢

    2010年10月27日 2:47
  • 重复次数以B表为准是什么意思?

    参考:

    SELECT
    	*
    FROM 表A A
    WHERE bID IN(
    		SELECT bID
    		FROM 表B B
    		WHERE B.bID = A.bID	-- 表A中bID的字段值 在 表B 中bID字段值 相同
    		GROUP BY bID
    		HAVING COUNT(*) -- 表B 对应的 bID 的记录数
    			=			-- 相等, 还是其他什么的, 你自己决定, 这里面用 = 
    			(			-- 表A 对应的 bID 的记录数
    				SELECT COUNT(*)
    				FROM 表A AA
    				WHERE AA.bID = A.bID
    			)
    	)
    		
    
    2010年10月27日 4:16
  • 就是说  表A 和 表b 里面都有重复的记录,  但是表a里面有的重复记录 比 表b 多 

    例如: 20716 这个值 在A表里重复了 4次, 在表B里重复了2次。 

    我想查出 20716 这个值 在b表里重复了几次 就在a表里查几次 

    2010年10月27日 4:48
  • 你好

    查出 表A中bID的字段值 在 表B 中bID字段值 相同 的记录,同时 重复次数 以表B为准
    或者你可以嘗試以下的方法

    SELECT B.ID AS B_ID, B.NoOfRecord AS B_NoOfRecords
    FROM (SELECT ID, COUNT(*) AS NoOfRecord FROM TableA GROUP BY ID) A
    INNER JOIN (SELECT ID, COUNT(*) AS NoOfRecord  FROM TableB GROUP BY ID) B 
    ON A.ID = b.ID 

    SELECT b.BID, COUNT(*) AS NoOfRecords
    FROM TableB b
    WHERE b.BID IN
    (SELECT DISTINCT a.BID
    FROM TableA a
    )
    不知道能不能解決這個問題
    可不可以給我們一個 SAMPLE RESULT 看看
    這會更容易明的
    Please correct me if my concept is wrong




    Please correct me if my concept is wrong

    Chi
    2010年10月27日 5:40
  • with

    a as (select id,rn=row_number() over (partition by id) from a)

    ,

    b as (select id,rn=row_number() over (partition by id) from b)

     

    select *

    from a

    join b

    where a.id=b.id

    and a.rn=b.rn


    hello
    2010年10月27日 7:18
  • 样本就是这个表,编辑器也没法截图

    这是表A

    bID      jID
    20716    1
    20716    2
    20716    3
    20716    4
    22058    5
    31927    6
    31927    7
    32975    8
     

     这是表B

    bID
    20716
    20716
    22058
    31927
    32975

     A 和 B 现在都有相等的数据, 看到 20716 在A 表中重复 4次, 在b表中重复了 2次, 我想得到的是 表A 中的数据(主要是jID), 与 表B 中的bID相等, 出现的次数以表B 为准, 也就是说 查出表a的数据 20716 只能出现两次(与表B的次数相等),

    2010年10月28日 2:42
  • 你可以使用merge 函数进行查询,具体参见SQL联机丛书,不过此函数只在SQL SERVER2008中才有。
    2010年10月30日 8:50