distinct 컬럼 내 중복값 하나만 출력 0 7 2,090

by 최진영 [SQL Query] sql query [2018.05.30 11:09:45]


CREATE TABLE KH_TRAIN(

STATION_NAME VARCHAR2(10),

STATION_NUM NUMBER(3),

STATION_SUKBUK VARCHAR2(100),

STATION_MYUNGSOO VARCHAR2(100),

STATION_FESTIVAL VARCHAR2(100),

STATION_IMAGE VARCHAR2(100),

STATION_LOCAL VARCHAR2(100),

STATION_NUMBER VARCHAR2(100)

);

 

INSERT INTO KH_TRAIN VALUES ('서울역', 1, 'https://www.naver.com/', 'https://www.naver.com/', 'https://www.naver.com/', 'image1.png', '서울시 용산구 한강대로 405', '1544-7788');

 

INSERT INTO KH_TRAIN VALUES ('서울역', 3, 'https://www.naver.com/', 'https://www.naver.com/', 'https://www.naver.com/', 'image1.png', '서울시 용산구 한강대로 405', '1544-7788');

 

INSERT INTO KH_TRAIN VALUES ('서울역', 5, 'https://www.naver.com/', 'https://www.naver.com/', 'https://www.naver.com/', 'image1.png', '서울시 용산구 한강대로 405', '1544-7788');

 

 

버튼을 눌렀을 때 세 개가 전부 나오는데 하나의 값만 나오게

할 수 없나요? distinct를 쓴다고 들어서...

SELECT DISTINCT * KH_TRAIN WHERE STATION_NAME = '서울역'

했는데 하나만 나와야 하는 거 아닌가요? 뭔가 잘못 쓴 건가요? ㅜㅜ

by 신이만든지기 [2018.05.30 11:23:00]

select distinct * 는 모든 컬럼을 가지고 중복데이터를 비교한다는 의미이고, STATION_NUM 의 값이 서로 다르기 때문에 중복데이터가 아니므로 3건이 나오는 것이 정상입니다. 

단순하게 위 데이터에서 1건만 가져오려면  STATION_NUM 컬럼을 제외시키고, 필요한 컬럼만 명시하면 됩니다.

SELECT  DISTINCT STATION_NAME, 기타컬럼들
FROM KH_TRAIN;

 


by 최진영 [2018.05.30 11:43:58]

아! 감사합니다! NUM 컬럼을 제외시키니까 됩니다! 


by 최진영 [2018.05.30 12:05:18]

SELECT DISTINCT * FROM KH_TRAIN WHERE STATION_NAME = '서울역'

이라고 하면 num때문에 다 나온다고 하셨는데요.

 

그럼 STATION_NUM만 제외하고 뽑을 수 있는 쿼리문이 있을까요?

SELECT DISTINCT 컬럼명, 컬럼명, 컬럼명 이 방법 말고는 없나요?


by 최진영 [2018.05.30 12:06:24]

public JSONArray stationinfoname(String name) {
        JSONArray array = new JSONArray();
        
        try {
            con = ds.getConnection();
            System.out.println("DAO trainname까지");
            
            String sql = "SELECT STATION_NAME FROM KH_TRAIN WHERE STATION_NAME = ?";
    
            pstmt = con.prepareStatement(sql);
            pstmt.setString(1, name);
            rs = pstmt.executeQuery();
            
            while (rs.next()) {
            JSONObject obj = new JSONObject();
            
            obj.put("stationinfo", rs.getString(1));
            obj.put("stationimage", rs.getString(6));
            obj.put("stationaddress", rs.getString(7));
            obj.put("stationnumber", rs.getString(8));
            array.add(obj);

 

이런식으로 네임을 클릭하면 값이 넘어가게 했기 때문에 알려주신 방법으로 하니까 열 인덱스가 맞지 않는다고 나옵니다.


by 마농 [2018.05.30 15:39:58]

컬럼 하나만 조회하도록 바꾸고서는 6,7,8 번째 컬럼을 받으려고 해서 나는 에러입니다.


by 마농 [2018.05.30 13:00:20]
SELECT *
  FROM kh_train
 WHERE station_name = '서울역'
   AND ROWNUM = 1
;

 


by 카라잔 [2018.05.31 10:42:56]

아! 감사합니다! 해결했습니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입