这是我的数据库表格表示。
我正在进行内部联接以从这些表中获取数据 查询如下。
查询-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 的记录?
查询的结果有何不同?
答案 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行)。
每个选择都会给出一个结果!