使用MYSQL处理不明确的列名

时间:2013-01-06 21:19:43

标签: mysql sql

我会尽力布置我正在尝试做的事情。我正在使用一个房地产数据库,该数据库有5个与不同类型的房产相关的桌子(住宅,商业,公寓,土地等)。该数据库有一个名为MLS的表,它将所有公共元素汇总到这些表中的一个表中。我需要查看这些表,其中主要包括来自此常见MLS表的数据,但还包括来自其他几个表的一些特定数据。

我将给出一个示例,其中包括在RESIDENTIAL和CONDO表中存在的字段,但不包括其他字段。

在伪代码中

SELECT MLSNUMBER,(residential.CommunityAmenities或condo.CommunityAmenities) 从MLSTABLE,RESIDENTIALTABLE,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

4 个答案:

答案 0 :(得分:2)

问题是(正如您已经注意到的)MySQL并不知道您想要哪个CommunityAmenities

您可以通过明确说明此字段应来自哪个表来解决此问题:

mul.CommunityAmenities

(用适当的表格替换mul。)

答案 1 :(得分:1)

您需要使用ALIAS来重命名列更有意义的内容:)

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

答案 2 :(得分:1)

如果您的列可以来自多个表,但只能在一个特定的表中(例如在公寓表或住宅表中但不能同时使用),您可以使用  coalesce (condotable.communityamenities, residentialtable.communityamenities) 给你第一个非空值。 (在您的情况下,只有非空值)

答案 3 :(得分:0)

在所选字段列表中,您需要对所有字段进行质量检查以避免此错误。

例如,您应该使用CommunityAmenities之类的内容,而不仅仅是SELECT列表中的mls.CommunityAmenities。否则,服务器不知道你指的是哪个确切的表 - 你加入了很多这些表,而且他们都有这个字段。