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.
精彩评论