MySQL의 가상 열에 조건을 추가하는 방법은 무엇입니까?

2020-08-01 mysql select where-clause having-clause

tbl_restaurant_featured_history.id 열에 조건을 추가하고 싶지만 'where 절'에 알 수없는 열 'featured' 라는 오류가 표시되고 조건을 추가하면 featured is not null 조건을 where 절에 추가 할 수 featured is not null having 절 0 개의 행을 반환 합니다 .

아래는 조건을 추가하기 전의 쿼리입니다.

SELECT 
  DISTINCT(tbl_restaurant.id) as restaurant_id,  
  tbl_restaurant.name,  
  tbl_restaurant_featured_history.id as featured, 
  tbl_restaurant.min_order_amount,  
  tbl_restaurant.latitude as latitude,  
  tbl_restaurant.logo, 
  tbl_favourite_restaurant.id as is_fav, 
  tbl_restaurant.address as address,  
  IF(tbl_restaurant_timing.start_time <= '19:56:26' && tbl_restaurant.service = 'Available' && tbl_restaurant_timing.end_time >= '19:56:26', 'Open', 'Closed') AS availblity,
  tbl_restaurant.longitude as longitude,  
  (
    SELECT ROUND(AVG(tbl_rate_review.rate)) 
    FROM tbl_rate_review 
    where tbl_rate_review.restaurant_id = tbl_restaurant.id 
    GROUP BY restaurant_id
  ) as avgrating, 
  (
    SELECT ROUND(AVG(tbl_rate_review.rate), 2) 
    FROM tbl_rate_review 
    where tbl_rate_review.restaurant_id = tbl_restaurant.id 
    GROUP BY restaurant_id
  ) as rating,  
  111.045 * DEGREES(ACOS(COS(RADIANS(23.0266941)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(72.6008731)) + SIN(RADIANS(23.0266941)) * SIN(RADIANS(latitude)))) AS distance_in_km 
FROM tbl_restaurant 
LEFT JOIN tbl_restaurant_featured_history ON tbl_restaurant_featured_history.restaurant_id = tbl_restaurant.id 
LEFT JOIN tbl_restaurant_menu ON tbl_restaurant_menu.restaurant_id = tbl_restaurant.id AND tbl_restaurant_menu.status='Active' 
LEFT JOIN tbl_favourite_restaurant ON tbl_favourite_restaurant.restaurant_id=tbl_restaurant.id AND tbl_favourite_restaurant.user_id=19 
LEFT JOIN tbl_restaurant_timing ON tbl_restaurant_timing.restaurant_id = tbl_restaurant.id AND tbl_restaurant_timing.day = 'Saturday' 
WHERE tbl_restaurant.status = 'Active'  
HAVING distance_in_km <= 10  
ORDER BY availblity DESC, distance_in_km ASC LIMIT 10, 10

이 쿼리의 출력

여기에 이미지 설명을 입력하십시오

Answers

쿼리 형식이 잘못되어 따르기가 어렵습니다.

select 절에서 이것을 볼 수 있습니다.

tbl_restaurant_featured_history.id as featured

쿼리의 where 절은 select 절에 정의 된 별칭을 참조 할 수 없습니다. 이 필터링 할 경우에, 당신은 열 이름 (사용해야 tbl_restaurant_featured_history.id (오히려 별칭보다) featured ) :

where tbl_restaurant_featured_history.id is not null

테이블 tbl_restaurant_featured_history 는 테이블 tbl_restaurant_featured_history 에 조인 된 LEFT 이므로 일부 행이 설정 한 ON 절의 조건과 일치하지 않기 때문에 결과에 널이 tbl_restaurant .
조건을 추가하려는 경우 :

tbl_restaurant_featured_history.id is not null

즉, 일치하는 행만 원하고 샘플 데이터에서 일치하는 행이 하나만 있음을 알 수 있습니다.
이 경우 조인을 INNER 조인으로 변경하기 INNER .

.................................
FROM tbl_restaurant 
INNER JOIN tbl_restaurant_featured_history ON tbl_restaurant_featured_history.restaurant_id = tbl_restaurant.id
.................................

Related