我的目的是利用Table1找出Table2中与之ID相同的数据行方法一:
select * from Table2 where BOOK_ID in (select BOOK_ID from Table1)
用这种方式找到的记录有50多万行
方法二:
select Table2.* from Table2,Table1 where Table2.BOOK_ID = Table1.BOOK_ID
而用这种方式找到的记录却只有30多万行为什么不一样呢,哪个是正确的呢?

解决方案 »

  1.   


    select * from Table2 a where exists (select 1 from Table1 where a.BOOK_ID = BOOK_ID )
     
      

  2.   

    应该是table2的bool_id可空,而空的记录有20万条哪个正确看你的需求,要不要输出空的记录
      

  3.   

    select table1.*, table2.* from table1 inner join table2 on table1.id = table2.id
      

  4.   

    in多连接少貌似是不可能的一般连接可能出错,因为在多对多的情况下会有重复,用in 或者exists比较保险
      

  5.   

    DECLARE @TA TABLE([BOOK_ID] INT)
    INSERT @TA 
    SELECT 1 UNION ALL 
    SELECT 2 UNION ALL 
    SELECT 3DECLARE @TB TABLE([BOOK_ID] INT)
    INSERT @TB 
    SELECT 1 UNION ALL 
    SELECT 1 UNION ALL 
    SELECT 3SELECT * FROM @TA WHERE [BOOK_ID] IN (SELECT [BOOK_ID] FROM @TB)
    SELECT A.* FROM @TA AS A JOIN @TB AS B ON A.[BOOK_ID]=B.[BOOK_ID]
    /*
    BOOK_ID
    -----------
    1
    3(2 row(s) affected)BOOK_ID
    -----------
    1
    1
    3(3 row(s) affected)*/
      

  6.   

    是哦,支持!!!如果有重复的BOOKID则会相乘!!
      

  7.   

    如果BOOK_ID是主键,把方法二改为如下,则与方法一等价了。
    select distinct Table2.* from Table2,Table1 where Table2.BOOK_ID = Table1.BOOK_ID 
      

  8.   


    是的,我这两张表的ID确实有重复,因为表中的每个城市都有一套相似的ID那这时我该用方法一还是二呢,谢谢
      

  9.   

    方法二是正确的,首先将两个表进行连接查询,然后显示表2的内容,排除了BOOK_ID为null的可能。但方法一是无法排除的。