В чем разница между запросом на соединение в цикле и запросом на соединение, используя предложение IN? - PullRequest
1 голос
/ 21 декабря 2011

enter image description here

Это мое представление таблиц базы данных.

Я делаю внутреннее соединение, чтобы получить данные из этих таблиц, запрос выглядит следующим образом.

Query-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')

Query-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 ]

1 голос
/ 21 декабря 2011

Во втором запросе это:

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

... будет рассматриваться как это:

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

... что, конечно, так же, как это:

Trips.carid = Cars.cid

Другими словами, появление carId в SQL обрабатывается как столбец carid в таблице Trips, а не как переменная C # carId, как вы, возможно, ожидаете. Следовательно, единственное семантическое различие между двумя запросами состоит в том, что первый имеет следующее:

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

... чего нет у второго, следовательно, первый запрос возвращает меньше строк, поскольку должно существовать Cars.cid значений, отличных от значений от 1 до 6 включительно.

0 голосов
/ 21 декабря 2011

Первый запрос возвращает только один результат с нужной вам информацией (6 строк).

Второй запрос возвращает 6 результатов, потому что вы делаете 6 различных выборов (по 1 строке в каждом).


Каждый выбор дает результат!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...