2011-04-08 2 views
0

절의 SQL 쿼리에이 테이블이 비어있는 경우 표 (테이블 1)가 있습니다.이 테이블이 비어 있으면 전체 쿼리 결과가 null입니다.이 테이블을 사용하지 않으면 및 절을 선택하십시오. 이 문제의 원인은 무엇이며이를 방지하는 방법은 무엇입니까?우리는 From 절의 빈 테이블을 추가 할 수 있습니까?

productsale 추신에서

선택 ps.ProductName, StockTransfer
여기서
ps.productcode = '010134600223'및
ps.productcode =

(case when ps.productcode=dtc.productcode then 

dtc.productcode 다른 ps.productcode DTC end)

이 쿼리는 StockTransfer 테이블을 양식 절에 추가하지 않으면 작동합니다 (StockTransfer 테이블이 비어있는 경우).

+0

예제를 게시하십시오! – user492238

답변

1

당신은 크로스 조인을합니다. 즉, Table1의 모든 행에 대해 Table2의 모든 행을 가져옵니다. 따라서 Table1에 4 개의 행이 있고 Table2에 2 개의 행이 있으면 결과 집합에 8 개의 행 (4 * 2 = 8)이 표시됩니다. Table2에 0 행이 있으면 결과 집합에서 0 행을 얻을 수 있습니다 (4 * 0 = 0).

이 문제를 해결하려면 조인 조건을 추가해야합니다.

+0

왜 내가 조인이 필요한가요. 나는 table1에서 선택하지 않기 때문에 비어 있습니다. –

+0

@Zain, 당신은 * table1과 table2에서 선택합니다. 'select *'는 포함 된 테이블의 모든 컬럼을 원하고'from' 절에 table1을 추가한다는 것은 쿼리에서 table1을 사용한다는 것을 의미합니다. 원하지 않으면 제거해야합니다. –

+0

OK 질문을 편집했습니다. –

2

가입 방법에 따라 다릅니다. 당신이

select * from tablea join tableb on tablea.id=tableb.id 

을하고 TableB의가 비어 있으면 아무 것도 없었다으로

, 다음 아무것도 될 수 없었다.

왼쪽 또는 오른쪽 조인은 빈 테이블인지 여부에 따라 정확하게 작업해야합니다.

왼쪽은 그게 전부가 모두 있기 때문에 그렇게

select * from tablea left join tableb on tablea.id=tableb.id 

은, 짧은 제외한 모든 단지 TABLEA 데이터를 반환 일치하는 두 번째 테이블에서 첫 번째 테이블의 모든 데이터와 데이터를 반환합니다 가입 (그러나 어떤 당신이 tableb에서 물어 보았던 추가 필드들, 그러나 분명히 아무런 데이터도 없었습니다.)

관련 문제