반응형

출처 : https://stackoverflow.com/questions/4796872/how-to-do-a-full-outer-join-in-mysql

MySQL에서 FULL OUTER JOIN 하는 방법?

저는 MySQL에서 Full Outer Join을 하고 싶습니다. 이것이 가능할까요? MySQL에 의해 Full Outer Join이 지원되나요?

14개의 답변 중 1개의 답변

MySQL에 full join 구문을 없습니다만 확실히 full join을 똑같이 할 수 있습니다.

다음 코드 샘플은 두개의 테이블 t1, t2에 대해 당신이 질문한 내용을 작성한 내용입니다.

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id

FULL OUTER JOIN 연산의 특별한 경우 위 쿼리는 중복된 행을 만들지 않습니다. 위 쿼리는 UNION set 연산을 하는데 쿼리 패턴에 의해 소개된 중복된 열을 제거합니다. 우리는 2번째 쿼리(방법으)로 anti-join 패턴을 사용하여 중복된 행을 제거할 수 있고 두 개의 집합을 함치기 위해 UNION ALL을 사용할 수 있습니다. 더 일반적인 경우로 FULL OUTER JOIN은 중복된 행을 리턴한다면 이것을 할 수 있습니다.

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
WHERE t1.id IS NULL
반응형
반응형

출처 : http://stackoverflow.com/questions/924729/mysql-select-many-fields-how-best-to-display-in-terminal

SELECT가 많은 칼럼 필드들을 가질 때 터미널에 최고의 방법으로 표시하는 방법은?


저는 Putty를 사용하고 있고 다음 쿼리를 실행하였습니다.

mysql> SELECT * FROM sometable;

'sometable'은 많은 필드 칼럼들이 있고 터미널에 표시될 많은 칼럼들이 결과로 있습니다. 다음 줄까지 필드들이 표시되어 있어서 필드 값과 컬럼 제목을 보는데 어렵습니다.

터미널에서 이러한 데이터를 보는 해결책은 무엇이 있을까요?

(추신 : 저는 phpMyAdmin이나 다른 GUI 인터페이스에 접근할 수 없습니다.)

MySQL 쿼리 결과를 text나 CVS로 명령어로 저장하는 방법이나 명령어를 입력하늡 방법같은 해결책을 찾아주셨으면 합니다.

---------------

8 개의 답변 중 2개의 답변만 추려냄.

1. 이 방법이 유용할 것입니다. (윈도우는 안됨):

mysql> pager less -SFX
mysql> SELECT * FROM sometable;

이 쿼리는 위의 파라미터로 된 less 명령어를 통해 파이프로 출력할 것입니다. 또한 이 쿼리는 테이블 출력을 화살표 키를 이용하여 가로 세로 스크롤(이동)되게 할 수 있습니다.

q  키를 누르면 이 보기를 끝내며 less 툴을 종료할 것입니다.

2.

SELECT * FROM sometable\G

위 쿼리의 행은 다음처럼 표시될 것입니다.

*************************** 1. row ***************************
             id: 1


반응형
반응형

참조사이트 - http://bugs.mysql.com/bug.php?id=9957

다음과 같은 경우

> select  round(87.875,2);

+------------+

| round(87.875,2)|

+------------+

| 87.87          |

+------------+

올바른 값은 87.88 입니다.


참조사이트 - http://www.soen.kr/lecture/ccpp/cpp1/8-1-4.htm

위의 경우처럼 반올림이 잘 안될 경우 floor함수를 사용하여 문제를 해결하였습니다.

round(87.875,2) => floor(87.875*100+0.5) / 100

위의 경우는 3째자리에서 2째자리로 반올림하기 때문에 100을 곱하고 0.5를 더한 뒤 floor한 후 100을 나누었습니다.

3자리일 경우 1000(10의 3승)을 곱하고 1000을 나누고 4자리일 경우 10000(10의 4승)을 곱하고 10000으로 나누시면 됩니다.



반응형
반응형
참고주소 : http://www.sybase.com.hk/detail?id=897

위의 참고주소에서
Error 20019 (SYBERPND)
Severity Level 7 (EXPROGRAM)
부분을 참고하면 됩니다.

while((return_code = dbresults(dbproc))!=NO_MORE_RESULTS)
    {
        if(return_code == SUCCEED)
        {
                ....
                ....
                while(dbnextrow(dbproc) != NO_MORE_ROWS)
                {
                    ....
                    ....
                }
        }
    }

위와 같이 소스 코딩할 때 while문을 2중으로 써 주는 것이 안전합니다.

반응형
반응형

MSSQL 쿼리를 실행하다가 다음과 같은 오류가 뜰 때가 있다.
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.

위와 같은 오류가 있을시에는 
set ansi_nulls on
set ansi_warnings on
위의 2개의 쿼리를 미리 보낸 후에 오류가 났던 쿼리를 보내면 해결이 된다. :)
반응형

+ Recent posts