MYSQL

2013-01-06 6 views
0

와 모호한 열 이름 다루기 내가 할 노력하고있어 정확하게 배치하기 위해서 최선을 다할거야. 부동산 (주거용, 상업용, 콘도, 토지 등)의 다양한 유형과 관련된 5 개의 테이블이있는 부동산 데이터베이스로 작업하고 있습니다. 데이터베이스에는 모든 공통 요소를이 테이블을 통해 하나의 테이블로 모으는 MLS라는 하나의 테이블이 있습니다. 나는이 일반적인 MLS 테이블의 데이터를 대부분 포함하는이 테이블에 대한 뷰가 필요하지만 다른 테이블의 몇 가지 특정 데이터도 포함합니다. MYSQL

나는 다른 사람을 중 주거 및 CONDO 테이블에있는 필드에 포함 예를주기 위하여려고하지만, 아니에요. 의사 코드에서

SELECT MLSNUMBER (residential.CommunityAmenities 또는 condo.CommunityAmenities) MLSTABLE, RESIDENTIALTABLE FROM , CONDOTABLE 여기

내가 노력하고있어 실제 코드이지만 모호한 열을 제공합니다 CommunityAmenities (및 다른 필드)가 여러 테이블에 있기 때문에 이름 오류가 발생했습니다.

USE lsh_retsdata; 

SELECT 
    '', 
    mls.mlsnum, 
    mls.propertyclassid, 
    '', 
    mls.streetnumber, 
    mls.streetname, 
    '', 
    mls.areaid, 
    mls.streetletter, 
    '', 
    mls.StreetAddressDisplay, 
    mls.remarks, 
    mls.remarks, 
    mls.city, 
    mls.STATE, 
    '', 
    mls.zipcode, 
    mls.countyid, 
    "US", 
    mls.latitude, 
    mls.longitude, 
    mls.listprice, 
    '', 
    '', 
    mls.taxamount, 
    '', 
    totalbedrooms, 
    totalfullbaths, 
    mls.sqfttotal, 
    '', 
    mls.acres, 
    mls.yearbuilt, 
    mls.heatingsystem, 
    mls.coolingsystem, 
    heatingsource, 
    mls.garagedescription, 
    mls.garagecapacity, 
    mls.zoning, 
    '', 
    mls.constructiontype, 
    mls.roofmaterial, 
    waterfrontdesc, 
    CONCAT(mls.highschool,CHAR(13),mls.juniorhighschool), 
    '', 
    mls.style, 
    associationfee, 
    '', 
    '', 
    '', 
    '', 
    OfficeCoListOfficeName, 
    '', 
    CommunityAmenities 
FROM rets_property_mls mls 
LEFT JOIN rets_property_mul mul 
    ON mls.mlsnum = mul.mlsnum 
LEFT JOIN rets_property_auc auc 
    ON mls.mlsnum = auc.mlsnum 
LEFT JOIN rets_property_com com 
    ON mls.mlsnum = com.mlsnum 
LEFT JOIN rets_property_llf llf 
    ON mls.mlsnum = llf.mlsnum 
LEFT JOIN rets_property_cnd cnd 
    ON mls.mlsnum = cnd.mlsnum 
+1

이) 왜 빈 필드를 선택하는? b) 어떤 오류가 발생합니까? – markus

+0

당신이 쿼리의 조합을 사용하는 것이 좋습니다. –

+1

따로 따로 분리 된 테이블을 갖는 것은 정신없는 IMHO입니다. "건물 유형"열이있는 하나의 (슈퍼) 테이블을 가지면 많은 문제가 사라집니다. 모든 유형에 대해 모든 열을 사용하지 않아도 걱정하지 마십시오. – Bohemian

답변

1

당신은 더 의미있는 열 뭔가 :

SELECT t1.CommunityAmenities AS t1CommunityAmenities, 
t2. CommunityAmenities AS t2CommunityAmenities 
FROM t1 left join t2 on ... 
0

선택한 필드의 목록에서 이름을 변경 ALIASs를 사용해야합니다, 당신은이 오류를 방지하기 위해 모든 분야의 품질에 필요합니다. 단지 CommunityAmenities SELECT 목록에서 당신이 mls.CommunityAmenities 같은 것을 사용해야 대신 예를 들어

. 그렇지 않으면, 서버는 당신이 의미했던 정확한 테이블을 알지 못합니다 - 당신은 그 중 많은 테이블에 합류했습니다, 그리고 그들은 모두이 필드를 가지고 있습니다.

2

문제는 MySQL은 당신이 원하는 CommunityAmenities 알고하지 않습니다 (당신은 눈치 챘로).

명시 적으로이 분야에서 온해야하는 테이블 진술에 의해이 문제를 해결할 수 있습니다

mul.CommunityAmenities

(해당 테이블 MUL 교체). 당신은 당신이 coalesce (condotable.communityamenities, residentialtable.communityamenities) 는 당신에게를 제공하는 데 사용할 수있는 하나 개 이상의 테이블에서 올 수 있지만 (콘도 테이블에 또는 주거 테이블에 있지만 두 예) 하나 개의 특정 테이블에있을 것입니다 열이

+0

당신은 옳습니다. 그러나 제 문제는 때때로 데이터가 mul.CommunityAmenities에 있고 때로는 데이터가 cnd에 있다는 것입니다.커뮤니티 테이블은 메인 테이블에있는 MLSNUM을 기반으로합니다. 나는 그것이 CND 테이블이나 MUL 테이블에서 오는 것인지를 알아내는 CommunityAmenities라는 필드를 가져 오기 위해 하나의 쿼리가 필요합니다. 그게 말이된다면. – AustinS

+0

@AustinS MLSNUM을 기반으로 어떤 필드를 선택합니까? MLSNUM과 일치하는 테이블일까요? – Jim

1

최초의 null 이외의 값. (귀하의 경우, 만 null이 아닌 값)

+0

이것은 내가 원하는 해결책처럼 보이지만 작동을 거부합니다. 필드 목록 오류에서 알 수없는 열이 나타납니다. 나는 그것을 계속 연구 할 것입니다. 귀하의 의견을 보내 주셔서 감사합니다! – AustinS

+0

'SELECT rets_property_mls.mlsnum, 병합 (rets_property_res.CommunityAmenities, rets_property_cnd.CommunityAmenities) rets_property_mls FROM 가 LEFT이 rets_property_res 입술 가입 ON rets_property_mls.mlsnum = LEFT rets_property_res.mlsnum 가입 rets_property_cnd CND = ON rets_property_mls.mlsnum rets_property_cnd.mlsnum' 이로 인해 오류 코드 : 1054가 발생합니다. '필드 목록'에 알 수없는 열 'rets_property_res.CommunityAmenities' – AustinS

+0

어머니의 반응이 예입니다. 나는 이것이 효과가있을 것이라고 생각한다. 여기 내 편집 코드가 별명이 나쁜'rets_property_mls의 MLS에서 LEFT를 mls.mlsnum, 유착 (res.CommunityAmenities, cnd.CommunityAmenities) 을 선택 싶어 ... 조인 rets_property_res의 입술 ON mls.mlsnum = res.mlsnum LEFT 가입 rets_property_cnd cnd ON mls.mlsnum = cnd.mlsnum' – AustinS