>

ID, appId, status, orderId가있는 테이블 ORDERS가 있습니다.

status can - OK, ONHOLD, DONE, REJECT etc

For this use case i want to filter with 
    status OK and ONHOLD
    and order
      if status is "OK" - I want to get allow all orderIds
      if status is "ONHOLD" - only get ids with whiteList orders.
Here the statusList has 2 Strings and whiteListOrders dynamically generated list

public List<Long> getIds(
   @Bind("appId") String appId,
   @BindIn("statusList") List<String> statusList,
   @BindIn("whiteListOrders") List<String> whiteListOrders);

mysql 쿼리에서 이것을 달성하는 방법

  • 답변 # 1

    아래는 일반적인 검색어입니다-

    SELECT <req cols> 
    FROM   mytable1 
    WHERE  status='OK' 
    UNION 
    SELECT <req cols> 
    FROM   mytable 
    WHERE  status='ONHOLD' 
    AND    id IN 
           ( 
                  SELECT orderids 
                  FROM   <whitelistorders>)
    
    

    테이블 및 열 세부 정보를 제공 할 수있는 경우 조인으로도 수행 할 수 있습니다.

    이것이 도움이되기를 바랍니다.

  • 답변 # 2

    질문을 통합 할 수 있습니다. 원하는 데이터를 제공합니다.

    (SELECT ids FROM ORDERS WHERE status='OK' AND ids IN (@whiteListIds))
    UNION  
    (SELECT ids FROM ORDERS WHERE status='ONHOLD' AND ids IN (@whiteListIds))
    
    

    언급 한 바와 같이, 이것은 UNION 없이 가능할 것입니다 :

    #set @whitelist = your whitelist IDS; /* Not sure how you have this setup */
    SELECT 
      * 
    FROM 
      user 
    WHERE 
      status='OK' 
      OR (
        status='ONHOLD' 
        AND id IN (@whitelist)
      )
    
    

    이것이 도움이되기를 바랍니다.

  • 답변 # 3

    제공된 답변 중 어느 것도 UNION을 사용하므로 최적이 아닙니다. 이 작업을 수행 할 이유가 없으므로 AND, OR 및 괄호 조합을 사용하여 WHERE 절 내에 절을 결합하여 필요한 여러 절을 쉽게 추가 할 수 있습니다.

    and exists(subquery) 사용을 고려하고 싶습니다   in (subquery) 를 사용하는 대신

관련 자료

  • 이전 sdk - 화면 공유를 구현하는 중 MediaError 화면에 대한 액세스가 거부되었습니다
  • 다음 파이썬 프로그램은 IDLE에서만 실행됩니다