什么是循环中的连接查询和使用IN子句的连接查询之间的区别。

时间:2011-12-21 09:32:10

标签: sql database inner-join

enter image description here

这是我的数据库表格表示。

我正在进行内部联接以从这些表中获取数据 查询如下。

查询-1

 select * from Trips
        Inner join TripPoints
               On Trips.tripkey=Trippoints.tripkey 
        inner join Cars
               On Trips.carid=Cars.cid 
                and Cars.cid IN ('1','2','3','4','5','6')
                where (lat>='4.0' and lat<='5.0')
                  and 
                (long>='52' and long <='54')

查询-2

    for(int carId=1;carId<=6;carId++)
        {
        select * from Trips
        Inner join TripPoints
           On         
          Trips.tripkey=TripPoints.tripkey 
          inner join Cars
          on 
          Trips.carid=Cars.cid and CARS.cid = carId
        where 
         (lat>='4.0' and lat<='5.0') 
           and 
         (long>='52' and long <='54')
        }

两个查询都成功执行。

Query-1 提供的记录少于 Query-2 的记录?

查询的结果有何不同?

2 个答案:

答案 0 :(得分:1)

在第二个查询中,这个:

Trips.carid=Cars.cid and CARS.cid = carId

...将被视为:

Trips.carid = Cars.cid AND Cars.cid = Trips.carid 

......当然与此相同:

Trips.carid = Cars.cid

换句话说,SQL中carId的外观被视为表carid中的列Trips,而不是您的C#变量carId。期待。因此,两个查询之间唯一的语义差异是第一个有这个:

and Cars.cid IN ('1','2','3','4','5','6')

...第二个没有,因此第一个查询返回的行数较少,因为除了值“1”到“6”之外,必须存在Cars.cid个值。

答案 1 :(得分:0)

第一个查询只返回一个带有您需要的信息的结果(6行)。

第二个查询返回6个结果,因为你做了6个不同的选择(每个1行)。


每个选择都会给出一个结果!