@Query(value="SELECT "
+ "new com.example.ballis.DTO.ProductNewDTO"
+ "(prod.id, prod.productEngName, img.imagePath, bd.brandName, sell.wishPrice, sell.inventoryDiv) "
+ "FROM Product prod "
+ "INNER JOIN Image img ON prod.id = img.targetId "
+ "INNER JOIN Brand bd ON prod.brand = bd.brandId "
+ "INNER JOIN Selling sell ON prod.id = sell.product "
+ "WHERE img.pageDiv = 1 AND img.mainImageDiv = 1 AND (sell.sellingStatus = 1 OR sell.sellingStatus = 11) "
+ "AND sell.wishPrice = "
+ "(SELECT MIN(wishPrice) "
+ "FROM Selling "
+ "WHERE product = prod.id) "
+ "AND (sell.inventoryDiv = 1 OR "
+ "(sell.inventoryDiv = 2 AND NOT EXISTS "
+ "(SELECT 1 FROM Selling subSell WHERE prod.id = subSell.product "
+ "AND sell.wishPrice = subSell.wishPrice "
+ "AND subSell.inventoryDiv = 1)))"
+ "ORDER BY prod.launchingDate DESC "
+ "LIMIT 12",
nativeQuery = false)
이게 원래 쿼리였는데 min(wish_price)를 가지는 데이터가 거래 체결로 인해 sellingStatus 값이 99가 되자 아예 prod값을 못읽어오는 문제가 발생했음
그럼 sellingStatus 99인 값만 제외하면 되지않냐?
아님.
신상품인 경우 selling 테이블(판매입찰)에 데이터가 없더라도 product 테이블에 존재한다면 sell 값은 null로, prod값은 가져와야한다.
그런데 이때 sellingStatus 99인 값은 이미 거래 체결되서 sell에는 없는 데이터 취급을 해야하므로 보이면 안됨...
sellingStatus 99 없애는거야 not 조건 걸어서 쉽게 없앴는데..
sellingStatus 99인 데이터만 존재한다면! 그래서 sell 테이블은 null로 가져오지만 prod는 데이터는 가져오는 상품이 있는데.. 이걸 아예 prod값을 못읽어 오는거임..
왜인가 했는데
"AND (sell.inventoryDiv = 1 OR "
+ "(sell.inventoryDiv = 2 AND NOT EXISTS "
+ "(SELECT 1 FROM Selling subSell WHERE prod.id = subSell.product "
+ "AND sell.wishPrice = subSell.wishPrice "
+ "AND subSell.inventoryDiv = 1)))"
이조건은 sell.inventoryDiv값이 존재한다는걸 전제로 하는거라...
사실 sell.inventoryDiv값은 여기서 읽어올 필요없고
특정 상품의 전체 sellingn 데이터를 조회해서 빠른배송 있냐 없냐 가져와야 하기 때문에 sell.inventoryDiv 조건을 지워버리고 싶었으나..
그러면 나머지값들은 동일하고 sell.inventoryDiv만 다른값이 다른 데이터로 취급되서 중복 출력되기 때문에 sell.inventoryDiv 조건을 지울수는 없다..
결국 sell.inventoryDiv가 null일 때 조건을 추가 해줘서 다뤄야함
SELECT
prod.id, prod.product_eng_name, img.image_path, bd.brand_name, sell.wish_price, sell.inventory_div
FROM Product prod
INNER JOIN Image img ON prod.id = img.target_id
INNER JOIN Brand bd ON prod.brand_id = bd.brand_id
LEFT JOIN Selling sell ON prod.id = sell.product_id AND NOT sell.selling_status = 99
WHERE img.page_div = 1 AND img.main_Image_div = 1
AND (sell.wish_price IS NULL OR
sell.wish_price = (
SELECT MIN(wish_price)
FROM Selling
WHERE product_id = prod.id AND NOT selling_status = 99
))
AND (sell.inventory_div IS NULL OR sell.inventory_div = 1 OR
(sell.inventory_div = 2 AND NOT EXISTS
(SELECT 1 FROM Selling subSell WHERE prod.id = subSell.product_id
AND sell.wish_price = subSell.wish_price
AND subSell.inventory_div = 1)))
ORDER BY prod.launching_date DESC
LIMIT 12
이러면 sell.inventory_div가 null이어도 문제 없지롱