2015-01-04 3 views
0

작은 렌터카 웹 사이트 용입니다. - 고객의 차를 임대하고자하는 거슬러 올라가는 From 날짜와 To 날짜 :날짜를 기반으로 한 SQL 중첩 SELECT 문

나는이 개 매개 변수를 취하는 CAR 테이블에있는 모든 차를 위해 검색하는 검색 기능이 있습니다. 또한 고객이 볼 수있는 차량 유형을 지정할 수있는 드롭 다운 상자가 있습니다. 나는 또한 car_id, customer_id, to_datefrom_date을 보유하고 예약 테이블이

CREATE PROCEDURE SearchForCars(
    @Make VARCHAR(50), 
    @Model VARCHAR(50), 
    @Age INT, 
    @Transmission VARCHAR(50), 
    @Colour VARCHAR(50), 
    @FuelType VARCHAR(50) 
AS 
BEGIN 
    SELECT 
     Make, Model, Registration, Age, Transmission, Body_Type, Colour, 
     Estimated_Value, Mileage, Fuel_Type, Rental_Price_Per_Day 
    FROM 
     HAS_Car 
    WHERE 
     Make LIKE '%' + @Make + '%' 
     AND Model LIKE '%' + @Model + '%' 
     AND Age = Age 
     AND Transmission LIKE '%' + @Transmission + '%' 
     AND Colour LIKE '%' + @Colour + '%' 
     AND Fuel_Type LIKE '%' + @FuelType + '%' 
END; 

: 자동차를 반환

내 현재의 방법은 저장 프로 시저입니다.

주된 검색에서 고객이 지정한 날짜에 따라 예약되지 않은 자동차 만 반환하고 싶습니다.

이것은 자동차 테이블을 예약 테이블에 연결하는 것을 포함하지만 어떻게해야할지 모르겠다.

+--------+----------+-------+---------+---+-----------+-----------+-----------+-------+-------+--------+----+ 
|  8 | Vauxhall | Corsa | LO10RTY | 4 | Manual | Hatchback | White  | 7000 | 48000 | Diesel | 20 | 
|  9 | Audi  | TT | KN13DOP | 1 | Manual | Coupe  | White  | 35000 | 10000 | Petrol | 55 | 
|  10 | Toyota | Yaris | AS12UWS | 1 | Automatic | Hatchback | Navy Blue | 11000 | 5000 | Petrol | 25 | 
+--------+----------+-------+---------+---+-----------+-----------+-----------+-------+-------+--------+----+ 

이것은 예약 테이블은 다음과 같습니다 :

는 예를 들어,이 차 테이블의 일부입니다

Booking_ID Customer_ID Car_ID From_Date  To_Date 
     1   8   9 01/01/2015 03/01/2015 

지금 02에서 임대 차량 번호 9를 검색 할 경우/01/2015에서 2013 년 1 월 13 일까지 자동차 번호 9 (audi tt)가 이미 중복 예약을 했으므로 기본 검색에 나타나서는 안됩니다.

+3

편집 질문과 쇼 샘플 두 테이블의 데이터뿐만 아니라 원하는 결과. –

+0

팁 : [Bobby Tables] (http://bobby-tables.com/)에서 방문하지 않으려면 쿼리에서 매개 변수를 사용하는 방법에 대해 알아야합니다. – HABO

+0

@ GordonLinoff done, 죄송합니다. sql 결과의 형식을 올바르게 지정하는 방법을 모르겠습니다. – jeffry

답변

0

시도해보십시오. 이것에

SELECT 
     Make, Model, Registration, Age, Transmission, Body_Type, Colour, 
     Estimated_Value, Mileage, Fuel_Type, Rental_Price_Per_Day 
    FROM 
     HAS_Car H 
    WHERE 
     Make LIKE '%' + @Make + '%' 
     AND Model LIKE '%' + @Model + '%' 
     AND Age = Age 
     AND Transmission LIKE '%' + @Transmission + '%' 
     AND Colour LIKE '%' + @Colour + '%' 
     AND Fuel_Type LIKE '%' + @FuelType + '%' 
and not exists (select 1 
       from bookings B 
       where H.bookings =B.bookings 
       and @book_date between From_Date and To_Date) 
+0

어디에서 @book_date를 선언 했습니까? – jeffry

0

변경 ypur의 SP :

CREATE PROCEDURE SearchForCars(
    @Make VARCHAR(50), 
    @Model VARCHAR(50), 
    @Age INT, 
    @Transmission VARCHAR(50), 
    @Colour VARCHAR(50), 
    @FuelType VARCHAR(50), 
    @start_date as Datetime, 
    @end_date as Datetime 

AS 
BEGIN 
    SELECT 
     Make, Model, Registration, Age, Transmission, Body_Type, Colour, 
     Estimated_Value, Mileage, Fuel_Type, Rental_Price_Per_Day 
    FROM 
     HAS_Car 
    WHERE 
     Make LIKE '%' + @Make + '%' 
     AND Model LIKE '%' + @Model + '%' 
     AND Age = Age 
     AND Transmission LIKE '%' + @Transmission + '%' 
     AND Colour LIKE '%' + @Colour + '%' 
     AND Fuel_Type LIKE '%' + @FuelType + '%' 
     AND Car_ID NOT IN (select Car_ID from booking_table Where (@start_date>to_date or @start_date<=from_date) AND (@end_date>=to_date or @end_date<from_date)** 

end 
+0

안녕하세요,이 다소 작동하지만 날짜가 예약 된 날짜가 아닐지라도 검색 테이블에서 예약 된 자동차가 완전히 제거됩니다 – jeffry

+0

나는 로직을 변경했습니다 .i 이제는 작동해야한다고 생각합니다 – Ehsan

+0

자동차에 이미 _booked_ 및 new _request_ 다음에 해당되면 날짜 범위가 겹칩니다 :'booked_start <= request_end and request_start <= booked_end'. 네 가지 비교가 필요하지 않습니다. 귀하의 논리가 요청 된 범위 내에 완전히 포함 된 예약에 대해서는 적절하지 않다고 생각합니다. – HABO