2016-10-10 4 views
0

3 개의 테이블을 연결해야합니다. 내 코드는 두 테이블에서 잘 작동하지만 세 테이블에서는 작동하지 않습니다. 데비안에서는 PostgreSQL 9.4.9를 사용합니다. 이 개 테이블postgresql에서 3 행/테이블 결합하기

코드 (WORKS) : 3 개 테이블

SELECT 
manufactures.manufacturename 
,products.productname 
FROM products 
INNER JOIN manufactures 
ON manufactures.manufactureid=products.productmanufacturer; 

코드 (하지 않습니다 작품)

SELECT 
manufactures.manufacturename 
,products.productname 
,languages.languagename 
FROM products 
INNER JOIN manufactures 
ON manufactures.manufactureid=products.productmanufacturer 
INNER JOIN languages 
ON languages.languagename=products.productlanguage; 

오류 메시지

baza_testowa=# SELECT 
baza_testowa-# manufactures.manufacturename 
baza_testowa-# ,products.productname 
baza_testowa-# ,languages.languagename 
baza_testowa-# FROM products 
baza_testowa-# INNER JOIN manufactures 
baza_testowa-# ON manufactures.manufactureid=products.productmanufacturer 
baza_testowa-# INNER JOIN languages 
baza_testowa-# ON languages.languagename=products.productlanguage; 
ERROR: operator does not exist: text = integer 
LINE 9: ON languages.languagename=products.productlanguage; 
           ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 


,267,


        Table "public.manufactures" 
    Column  | Type |        Modifiers        
-----------------+---------+---------------------------------------------------------------------- 
manufactureid | integer | not null default nextval('manufactures_manufactureid_seq'::regclass) 
manufacturename | text | not null 
Indexes: 
"manufactures_pkey" PRIMARY KEY, btree (manufactureid) 


 Table "public.languages" 
    Column | Type |       Modifiers        
--------------+---------+---------------------------------------------------------------- 
languageid | integer | not null default nextval('languages_languageid_seq'::regclass) 
languagename | text | not null 
Indexes: 
    "languages_pkey" PRIMARY KEY, btree (languageid) 
+0

오류 메시지는'products.productlanguage'는 정수입니다. 정말로'languages.languagename'과 같은 것을 원하십니까? – mm759

답변

1

languages.languagename 텍스트하지만 정수 products.productlanguage, 당신은 당신이 의 가입 할 수없는 그들에게

0

을 비교할 수 없습니다 다른 유형의 열. products.productlanguage을 정수로 지정하고 languages.languagename을 텍스트로 사용하려면 명시 형 캐스팅을 으로 사용할 수 있습니다. 따라서 귀하의 경우에는 다음과 같아야합니다.

SELECT manufactures.manufacturename, products.productname, languages.languagename 
FROM products 
INNER JOIN manufactures ON manufactures.manufactureid = products.productmanufacturer 
INNER JOIN languages ON languages.languagename = products.productlanguage::text;