开发者

Confused about "the multi-part identifier could not be bound" error in SQL 2008

I created a view that gets data from several tables, whenI go to compile it I keep get开发者_C百科ting the "The multi-part identifier could not be bound" error which has me completely stumped as to why. Below is my SQL View (error messages coming from the bold text), take a look and please help:

CREATE VIEW AMACO_VIEW_THIRD_PARTY_INSURANCE_INITIAL_LETTERS
AS
    SELECT
        CUSTOMERS.ID,
        CUSTOMERS.FIRST_NAME,
        CUSTOMERS.LAST_NAME,
        CUSTOMER_ACCIDENT_DTLS.ACCIDENT_DATE,
        CUSTOMER_ACCIDENT_DTLS.ACCIDENT_TIME,
        HIRED_VEHICLES.HIRE_CHARGE_AMT,
        CUSTOMER_STORAGE.START_DATE,
        CUSTOMER_STORAGE.STORAGE_FEE_PER_DAY,
        CUSTOMER_RECOVERY.RECOVERY_FEE,
        THIRD_PARTIES.THIRD_PARTY_NAME,
        THIRD_PARTY_VEHICLES.VEHICLE_REGISTRATION,
        INSURANCE_COMPANIES.INSURANCE_COMPANY_NAME,
        ADDRESSES.STREET_1,
        ADDRESSES.STREET_2,
        CITIES.CITY_NAME,
        DISTRICTS.DISTRICT_NAME,
        COUNTRIES.COUNTRY_NAME,
        ADDRESSES.POSTAL_CODE
    FROM CUSTOMERS, THIRD_PARTY_INITIAL_LETTER_PRINTED
    LEFT JOIN CUSTOMER_ACCIDENT_HDRS
        ON **CUSTOMERS.ID** = CUSTOMER_ACCIDENT_HDRS.CUSTOMER_ID
    INNER JOIN CUSTOMER_ACCIDENT_DTLS
        ON CUSTOMER_ACCIDENT_HDRS.ID = CUSTOMER_ACCIDENT_DTLS.CUSTOMER_ACCIDENT_HDR_ID
    LEFT JOIN CUSTOMER_VEHICLES
        ON **CUSTOMERS.CUSTOMER_VEHICLE_ID** = CUSTOMER_VEHICLES.ID
    INNER JOIN THIRD_PARTIES
        ON THIRD_PARTIES.CUSTOMER_ACCIDENT_ID = CUSTOMER_ACCIDENT_HDRS.ID
    INNER JOIN THIRD_PARTY_VEHICLES
        ON THIRD_PARTIES.THIRD_PARTY_VEHICLE_ID = THIRD_PARTY_VEHICLES.ID
    INNER JOIN THIRD_PARTY_INSURANCE_POLICIES
        ON THIRD_PARTIES.ID = THIRD_PARTY_INSURANCE_POLICIES.THIRD_PARTY_ID
    INNER JOIN INSURANCE_POLICIES
        ON THIRD_PARTY_INSURANCE_POLICIES.INSURANCE_POLICY_ID = INSURANCE_POLICIES.ID
    INNER JOIN INSURANCE_COMPANIES
        ON INSURANCE_POLICIES.INSURANCE_COMPANY_ID = INSURANCE_COMPANIES.ID
    LEFT JOIN HIRED_VEHICLES
        ON **CUSTOMERS.ID** = HIRED_VEHICLES.CUSTOMER_ID
    INNER JOIN CUSTOMER_STORAGE
        ON CUSTOMER_VEHICLES.ID = CUSTOMER_STORAGE.CUSTOMER_VEHICLE_ID
    INNER JOIN CUSTOMER_RECOVERY
        ON CUSTOMER_VEHICLES.ID = CUSTOMER_RECOVERY.CUSTOMER_VEHICLE_ID
    INNER JOIN ADDRESSES
        ON INSURANCE_COMPANIES.ADDRESS_ID = ADDRESSES.ID
    INNER JOIN COUNTRIES
        ON ADDRESSES.COUNTRY_ID = COUNTRIES.ID
    INNER JOIN DISTRICTS
        ON ADDRESSES.DISTRICT_ID = DISTRICTS.ID
    INNER JOIN CITIES
        ON ADDRESSES.CITY_ID = CITIES.ID
    WHERE CUSTOMER_ACCIDENT_HDRS.ID NOT IN (SELECT THIRD_PARTY_INITIAL_LETTER_PRINTED.CUSTOMER_ACCIDENT_HDR_ID FROM THIRD_PARTY_INITIAL_LETTER_PRINTED)
GO


Remove the section

, THIRD_PARTY_INITIAL_LETTER_PRINTED

Have a look at this simplified version of your query

DECLARE @Table1 TABLE(
        ID INT
)
DECLARE @Table2 TABLE(
        ID INT
)
DECLARE @Table3 TABLE(
        ID INT
)

SELECT  *
FROM    @Table1 t1,
        @Table2 t2 LEFT JOIN
        @Table3 t3  ON  t1.ID = t3.ID

This will produce the same error.

If you wish to CROSS JOIN t1 and t2, you have to do that before you USE the rest of the joins.

Something like

;WITH Vals AS (
        SELECT  t1.ID t1ID,
                t2.ID t2ID
        FROM    @Table1 t1,
                @Table2 t2
)
SELECT  *
FROM    Vals v LEFT JOIN
        @Table3 t3  ON  v.t1ID = t3.ID


Ok the problem WAS with THIRD_PARTY_INITIAL_LETTER_PRINTED, but it was when I was inserting it in the outer SELECT statement, not the sub-query statement.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜