>

절의 위치에 따라 mysql 결과가 다르게 나타납니다.

SELECT sum(if(bos = 'B', txn_qty*-1, txn_qty)) as qty 
FROM tstock_txn 
WHERE date_format(txn_date, '%Y%m') >= '201905' and company_id='003490' 
union all
SELECT qty as qty FROM tstock_txn_temp WHERE company_id='003490'

결과 : 맞습니다

-290
290

변경된 검색어

SELECT qty as qty 
FROM tstock_txn_temp 
WHERE company_id='003490' 
union ALL 
SELECT sum(if(bos = 'B', txn_qty*-1, txn_qty)) as qty
FROM tstock_txn 
WHERE date_format(txn_date, '%Y%m') >= '201905' and company_id='003490'

결과 : 정확하지 않습니다

290
0

결과는

290
-290

  • 답변 # 1

    문제를 재현 할 수 없습니다.

    drop table if exists tstock_txn,tstock_txn_temp;
    create table tstock_txn_temp
    (company_id int,qty int);
    insert into tstock_txn_temp values (003490,200);
    create table tstock_txn
    (company_id int, txn_date date,bos varchar(1), txn_qty int);
    insert into tstock_txn values
    (003490,'2019-05-01','b',100),
    (003490,'2019-05-01','b',100);
    SELECT sum(if(bos = 'B', txn_qty*-1, txn_qty)) as qty 
    FROM tstock_txn 
    WHERE date_format(txn_date, '%Y%m') >= '201905' and company_id='003490' 
    union all
    SELECT qty as qty FROM tstock_txn_temp WHERE company_id=003490;
    +------+
    | qty  |
    +------+
    | -200 |
    |  200 |
    +------+
    2 rows in set (0.02 sec)
    SELECT qty as qty FROM tstock_txn_temp WHERE company_id='003490' 
    union ALL 
    SELECT sum(if(bos = 'B', txn_qty*-1, txn_qty)) as qty
    FROM tstock_txn 
    WHERE date_format(txn_date, '%Y%m') >= '201905' and company_id='003490' ;
    +------+
    | qty  |
    +------+
    |  200 |
    | -200 |
    +------+
    2 rows in set (0.00 sec)
    
    

  • 답변 # 2

    이제 문제의 원인을 찾았습니다. tstock_txn_temp의 qty 열 속성은 부호없는 int입니다. 따라서 아래 절의 값이 0으로 변경되었습니다.

    개발 테이블 속성과 제품 테이블 속성은 약간 다릅니다. 셸에서 근본 원인을 찾지 못했습니다.

    어쨌든 나는 이것이 우스운 일이라고 생각합니다.

    다음과 같이 재현 할 수 있습니다. 변경 테이블 tstock_txn_temp 변경 수량 qt 부호 없음;

    모두 감사합니다.

  • 이전 mysql - 각 값의 숫자를 세는 SQL
  • 다음 android - 뷰 모델 - 런타임에 livedata를 관찰하면서 메소드의 매개 변수를 변경 하시겠습니까?