2011-04-12 2 views
2

SQL에서 이러한 연산을 처음 사용하기 때문에 단어가 잘못되었습니다. 동부 및 서부 지역에 address_state라는 필드가있는 테이블이 있다고 가정합니다. 나는조인이 일치하지 않는 경우 SQL 추가 다른 조인

예를 들어 STATE_ABBREVIATION OR을 STATE_NAME 중 하나와 동일한 것으로 address_state의 UCASE에 가입 할 수 있도록하려면 :

SELECT orders.total_value, territories.territory FROM orders 
INNER JOIN tblCanadianTerritories ON 
UCASE(orders.technical_address_state) = tblCanadianTerritories.state 
OR 
tblCanadianTerritories ON 
UCASE(orders.technical_address_state) = tblCanadianTerritories.name 

WHERE UCASE(orders.technical_address_country) = "CANADA" 

편집 :

:

이 두 가지 가능한 솔루션에왔다

SELECT so_order.id, so_order.date_entered, so_order.check_if_new_customer, tblCanadianTerritories.territory, so_order.total_value FROM so_order 
INNER JOIN tblCanadianTerritories ON 
UCASE(so_order.technical_address_state) = tblCanadianTerritories.state 
OR 
UCASE(so_order.technical_address_state) = tblCanadianTerritories.name 
WHERE UCASE(so_order.technical_address_country) = "CANADA" 
ORDER BY so_order.date_entered ASC 

또는

SELECT so_order.id, so_order.date_entered, so_order.check_if_new_customer, 

tblCanadianTerritories.territory, so_order.total_value FROM so_order 
INNER JOIN tblCanadianTerritories ON UCASE(so_order.technical_address_state) = 

tblCanadianTerritories.state 
WHERE UCASE(so_order.technical_address_country) = "CANADA" 
ORDER BY so_order.date_entered ASC 
UNION 
SELECT so_order.id, so_order.date_entered,so_order.check_if_new_customer, 

tblCanadianTerritories.territory, so_order.total_value FROM so_order 
INNER JOIN tblCanadianTerritories ON UCASE(so_order.technical_address_state) = 

tblCanadianTerritories.name 
WHERE UCASE(so_order.technical_address_country) = "CANADA" 
ORDER BY so_order.date_entered; 

하지만 둘 다 다른 결과를 얻는 것으로 보입니다.

+0

(별명으로 지금)

SELECT o.total_value, territories.territory FROM orders AS o INNER JOIN tblCanadianTerritories AS ct ON UCASE(o.technical_address_state) = ct.state OR UCASE(o.technical_address_state) = ct.name WHERE UCASE(o.technical_address_country) = "CANADA" 

합니다. tblCanadianTerritories라는 테이블/뷰를 사용하여 orders라는 테이블/뷰에 참여하고 있습니다. 그런 다음 so_order라는 테이블/뷰를 참조합니다. 주문과 so_orders에 동일한 표가 잘못 입력 되었습니까? –

+0

예, 살균되었습니다. – davidahines

답변

4

이 시도 : 당신은 UNION을 사용하려면

SELECT orders.total_value, territories.territory 
    FROM orders AS so_order INNER JOIN tblCanadianTerritories 
     ON (
      UCASE(so_order.technical_address_state) = tblCanadianTerritories.state 
      OR 
      UCASE(so_order.technical_address_state) = tblCanadianTerritories.name 
      ) 
WHERE UCASE(so_order.technical_address_country) = "CANADA" 

는,이 시도 :

SELECT orders.total_value, territories.territory 
    FROM orders AS so_order INNER JOIN tblCanadianTerritories 
     ON UCASE(so_order.technical_address_state) = tblCanadianTerritories.state 
WHERE UCASE(so_order.technical_address_country) = "CANADA" 
UNION 
SELECT orders.total_value, territories.territory 
    FROM orders AS so_order INNER JOIN tblCanadianTerritories 
     ON UCASE(so_order.technical_address_state) = tblCanadianTerritories.name 
WHERE UCASE(so_order.technical_address_country) = "CANADA" 
+0

노조 선택도 똑같은 일을합니까? – davidahines

+1

@dah : 예, UNION을 사용하여 쿼리로 게시물을 업데이트했습니다. – Chandu

+1

@dah (예 : 원래 질문 에서처럼) @dah. 예문이 더 복잡해지면 –

2

별도의 가입이 필요하지 않습니다. 이 시도 : 당신은 버그가있을 수 있습니다

+0

나는 두 개의 답을 고를 수 있으면 좋겠다. 등산 배를 가져라. – davidahines

관련 문제