SQL MS SQL Server v.8 Union 문제
-
11-09-2019 - |
문제
이 쿼리를 사용하고 있습니다.
SELECT DISTINCT pat.PublicationID
FROM dbo.PubAdvTransData AS pat INNER JOIN
dbo.PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID
WHERE (pa.AdvertiserID = 31331) AND (pat.LastAdDate > 7 / 1 / 2009)
ORDER BY pat.PublicationID
그리고 0 결과를 반환합니다. 내가하려고하는 것은 출판물과 Abid (Area Buy ID)가 포함 된 출판물 AreaBuy 테이블과 연합하는 것입니다. 내가하려고하는 것은 위의 쿼리가 지역 구매 테이블에있는 PublicationId를 반환하는 경우, (Union을 사용하고있는 이유), 지역 구매 ID를 게시 ID로 포함시켜야합니다.
이것은 나의 마지막 시도 였지만 다시 1 쿼리가 결과를 반환하는지 여부에 관계없이 1 결과를 반환합니다 ... 내 마음은 이것에 대해 완전히 비워졌습니다!
SELECT DISTINCT pat.PublicationID
FROM dbo.PubAdvTransData AS pat INNER JOIN
dbo.PubAdvertiser AS pa ON pat.AdvTransID = pa.AdvTransID
WHERE (pat.LastAdDate > 7 / 1 / 2009) AND (pat.PublicationID = 29171)
UNION
SELECT AreaBuy.AreaBuyID AS PublicationID
FROM AreaBuy INNER JOIN
PublicationAreaBuy ON AreaBuy.AreaBuyID = PublicationAreaBuy.AreaBuyID INNER JOIN
dbo.PubAdvertiser AS PubAdvertiser_1 ON PubAdvertiser_1.PublicationID = PublicationAreaBuy.PublicationID
ORDER BY pat.PublicationID
해결책
당신의 문제가 무엇인지 정확히 이해할 수 없어서 죄송하지만, 당신의 문제가 "Union"운영자가 중복 행을 제거한다는 사실에서 비롯된지 궁금합니다 (결합 된 것보다 "Select a Select" 질문). 이 행동을 원하지 않으면 대신 "Union All"을 사용하십시오.
내가 바로 알아 차린 것은이 부분이었다 : "(pat.lastaddate> 7 / 1 / 2009)". "LastAddate"를 하드 코딩 날짜 값과 비교하려고하는 것처럼 보입니다. 실제로 당신은 "LastAddate"를 7의 값으로 비교하여 1로 2009로 나눈 값으로 나눈 값을 비교하고 있습니다. 이것은 정수 부서이기 때문에 표현식은 본질적으로 "(Pat.lastaddate> 0)입니다.
하드 코딩 날짜와 비교하려면 다음과 같이 날짜 값을 단일 따옴표로 넣어야합니다. 프로덕션 응용 프로그램에서 하드 코딩 된 날짜는 나쁜 생각이지만, 이것이 단지 테스트/디버깅 목적이라고 가정합니다.