CREATE TABLE A
(
 A_ID int primary key not null,
 A_Name varchar(50)
 --......
)CREATE TABLE B
(
B_ID int primary key not null,
A_ID int 
--......
)
表A与表B是一对多关系
要求查询表A的所有字段,条件是A_ID在表B中出现次数不为零的所有记录
求查询效率最好的语句,我的语句如下,但是效率不高!谢谢SELECT * FROM A WHERE (SELECT COUNT(*) FROM B WHERE A.A_ID=B.A_ID)>0

解决方案 »

  1.   


    select a.*
    from a left join b on a.a_id = b.a_id
    where b.b_id is null
      

  2.   


    select a.*
    from a left join b on a.a_id = b.a_id
    where b.b_id is not null
      

  3.   


    select a.*
    from a left join b on a.a_id = b.a_id
    where b.b_id is null连查比用in效率好些
      

  4.   

    select
     a.*
    from
     a left join b on a.a_id = b.a_id
    where
     b.b_id is not null--连接字段加索引
      

  5.   

    SELECT * FROM A
    WHERE EXISTS(SELECT TOP(1) 1 FROM B WHERE A_ID = A.ID)
      

  6.   

    select a.*
    from a left join b on a.a_id = b.a_id
    where b.b_id is not null