2012-08-28 1 views
3

나는이 답을 찾아 냈다. 두 개의 동일한 테이블, 연락처 및 contacts_copy가 있습니다. 각 회사에는 성명, 회사, 거리, 도시, 주 및 우편 번호가 있습니다. contacts.street가 NULL이 아니면 해당 항목을 선택합니다. 일치하는 경우 중복 테이블에서 해당 항목을 선택합니다.mySQL CASE giving Err 1064

SELECT contacts.fullname, 
CASE WHEN contacts.street IS NULL 
THEN 
contacts_copy.Company, 
contacts_copy.street, 
contacts_copy.city, 
contacts_copy.state, 
contacts_copy.zip 
ELSE 
contacts.Company, 
contacts.street, 
contacts.city, 
contacts.state, 
contacts.zip 
END CASE 
FROM contacts_copy, contacts 
WHERE contacts.Company = contacts_copy.fullname 
AND contacts.kind = 'Person' 
ORDER BY contacts.last DESC 



I keep getting: 
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 
contacts_copy.street, 
contacts_copy.city, 
contacts_copy.state, 
contacts_cop' at line 4 

더 쉬운 방법이 있어야합니다. MySQL 오류 메시지는별로 도움이되지 않습니다.

난 당신이 MySQL을 사용하여이 작업을 수행 할 수 있다고 생각하지 않습니다 감사합니다,

답변

3

, 또는 내가 본 SQL의 모든 종류. 선택하는 열은 고유해야하지만 값은 조건부 일 수 있습니다. 같은 효과를해야

SELECT contacts.fullname, 
    IF(contacts.street IS NULL, contacts_copy.Company, contacts.Company), 
    ... 

을 :

은 당신이 할 수있는 것은 결과에서 각 열에 대한 IF() 절을 가지고있다.

1

편집 : 테이블 별칭이 변경되었으며 추가 company.kind 절이 추가되었습니다. 결과의 정렬 열을 포함 불행하게도이 당신을 필요로 않습니다

SELECT person.last, 
     person.fullname, 
     person.Company, 
     person.street, 
     person.city, 
     person.state, 
     person.zip 
    FROM contacts person 
    WHERE person.kind = 'Person' 
    AND person.street IS NOT NULL 
UNION 
SELECT person.last, 
     person.fullname, 
     company.Company, 
     company.street, 
     company.city, 
     company.state, 
     company.zip 
    FROM contacts person 
    INNER JOIN contacts company ON person.Company = company.fullname 
    WHERE company.kind = 'Company' 
    AND person.kind = 'Person' 
    AND person.street IS NULL 
ORDER BY 1 DESC 

:

한 가지 방법은 UNION를 사용하는 것입니다. 일치 company 항목이 존재하지 않지만 streetNULL하지 person에서 원래의 시도와는 달리,이 버전이 포함됩니다 행 : 독수리 눈에

참고.

+0

닐, 거의 같습니다. 아이디어를 얻으려는 원래 테이블의 이미지가 있습니다. 거리, 도시, 주 및 우편 번호를 채워야합니다. 여기서 회사는 일치하는 데이터를 가진 kind = person입니다. http://versastudio.com/misc/contactsTbl.png이 두 레코드를 일치시킬 수 있다면 예를 들어 데이터를 채울 수 있습니다. 감사합니다! – 4midori

+0

@ 4midori 나는 내 이미지를 이미지와 더 잘 맞도록 약간 편집했지만 도움이되지 않는다면 내 대답이 기대와 어긋나는 부분을 더 분명하게해야합니다. – Neil

+0

데이터는 CRM의 연락처 내보내기입니다. 그들이 내게주는 데이터 문제는 kind = people의 연락처가 연관된 회사의 street/city/state/zip을 포함하지 않는다는 것입니다. 따라서이 예에서 루크 브린 들리는 친절한 사람이고 회사 필드에는 일치하는 회사 엔트리가 있기 때문에 회사의 거리/도시/주/지퍼를 채워야합니다. 즉, 종류 = 회사는 type = person 레코드를 채워야합니다. fullname 회사 도시 거리 도시 국가 우편 번호 Luke Brindley Jammin 'J ... 227 Maple ... Vienna VA 22180 – 4midori

0
SELECT c1.fullname AS fullname, 
c1.Company AS company, 
c1.first AS firstname, 
c1.last AS lastname, 
c2.street AS street, 
c2.city AS city, 
c2.state AS state, 
c2.zip AS zip 
FROM contacts AS c1, contacts AS c2 
WHERE c1.kind = 'Person' 
AND c1.Company = c2.fullname 
ORDER BY c1.last ASC; 

대답했습니다.