Table 판매
제품ID 수량 구매자 구매일
A111 10 홍길동 2013-10-31 12:18:10.933
A111 21 가나다 2013-10-31 12:18:10.933
B222 8 김점순 2013-10-31 12:18:10.933
C333 50 최정일 2013-10-31 12:18:10.933
A111 15 유일자 2013-10-31 12:18:10.933
D444 15 이상해 2013-10-31 12:18:10.933
Table 제품
제품ID 원산지 단가
A111 한국 100
B222 일본 80
C333 일본 180
D444 중국 80
Table 구조는 저렇습니다.
전 여기서 단가가 제일 싼 제품ID 를 검색해서 (A111, D444 가 되겠죠)
판매 정보와 단가를 가져오게 하려고 하는데요...
Select *
From 판매
Where 제품ID IN (Select 제품ID From 제품 Where 단가 = (Select Min(단가) From 제품))
이렇게 하면
B222 8 김점순 2013-10-31 12:18:10.933
D444 15 이상해 2013-10-31 12:18:10.933
가져 오나 단가를 못가져와서 Inner Join 을 사용 해야 할꺼 같은데....
Select A.제품ID, A.수량, A.구매자, A.구매일, B.단가, B.제품ID
From 판매 AS A, 제품 AS B
Where A.제품ID IN (Select 제품ID From 판매 Where 제품ID IN (Select 제품ID From 제품 Where 단가 = (Select Min(단가) From 제품)))
이렇게 하면
B222 8 김점순 2013-10-31 12:18:10.933 100 A111
B222 8 김점순 2013-10-31 12:18:10.933 80 B222
B222 8 김점순 2013-10-31 12:18:10.933 180 C333
B222 8 김점순 2013-10-31 12:18:10.933 80 D444
D444 15 이상해 2013-10-31 12:18:10.933 100 A111
D444 15 이상해 2013-10-31 12:18:10.933 80 B222
D444 15 이상해 2013-10-31 12:18:10.933 180 C333
D444 15 이상해 2013-10-31 12:18:10.933 80 D444
나오네요...
흠... 지도 부탁 드립니다.
Comment 4
-
군고구마
2013.10.31 16:25
CREATE TABLE 판매(제품ID CHAR(10),수량 INT,구매자 VARCHAR(15),구매일 DATETIME)GOCREATE TABLE 제품(제품ID CHAR(10),원산지 CHAR(10),단가 INT)GOINSERT INTO 판매 VALUES('A111',10,'홍길동',GETDATE())INSERT INTO 판매 VALUES('B222',8,'김점순',GETDATE())INSERT INTO 판매 VALUES('C333',50,'최정일',GETDATE())GOINSERT INTO 제품 VALUES('A111','한국',100)INSERT INTO 제품 VALUES('B222','일본',80)INSERT INTO 제품 VALUES('C333','일본',180)GOSELECT *FROM 판매 AS A WITH(NOLOCK)INNER JOIN 제품 AS B WITH(NOLOCK)ON A.제품ID = B.제품IDWHERE B.단가 = (SELECT MIN(단가)FROM 제품 WITH(NOLOCK))이렇게 해보세요 ^^모든 데이터를 집어넣지는 않았지만 가장 싼값을 가져옵니다.질문해주신 쿼리를 그냥 바로잡았구요. 아마 더욱 좋은 쿼리도 있을 겁니다.좀 더 고민해보시는게 ^^ -
주디아줌마
2013.10.31 17:15
이 방법도 가능합니다.
WITH CTE
AS (
SELECT
* ,
RANK() OVER(ORDER BY 단가 ASC) AS ScoreRank
FROM 제품
)
SELECT *
FROM CTE T1
INNER JOIN 판매 T2
ON T1.제품ID = T2.제품ID
WHERE T1.ScoreRank = 1
-
에센이
2013.10.31 22:54
Select *
From 판매 AS A, 제품 AS B
Where A.제품ID = B.제품ID AND A.제품ID IN (Select 제품ID From 제품 Where 단가 = (Select Min(단가) From 제품))이것도 되는데....
어떤것이 더 비용적 측면에서 나은건지요.... 흠...
-
하하하하하
2013.11.04 11:47
조인을 하고 난 다음에는 단가 중에 가장 작은 값을 가져오면 되기때문에
굳이 글쓴이님께서 where절에 and 뒤에 작성하신 a.제품id 이부분은 필요가 없습니다.
그래서 그부분은 생략하고
Select *
From 판매 AS A, 제품 AS B
Where A.제품ID = B.제품ID AND 단가 = (Select Min(단가) From B))이렇게만 작성해도 되지만
조인부분은 제가알기로 호환성때문에 ansi 표준에 맞춰서
join, on 구문 써서 군고구마님처럼 조인을 하시는게 낫습니다.
물론 글쓴이님께서 작성하신것처럼 where 절로 한것과 의미는 같습니다...