2012-03-22 37 views
30

我嘗試了以下選擇:PostgreSQL的列引用「身份證」是不明確的

SELECT (id,name) FROM v_groups vg 
inner join people2v_groups p2vg on vg.id = p2vg.v_group_id 
where p2vg.people_id =0; 

,我得到以下錯誤列引用「身份證」是不明確的。

事情是,如果我嘗試相同的選擇,但我只要求(名稱),而不是身份證也,它的工作原理。 我是新來的,也許我錯過了一些明顯的東西。有什麼建議麼?

謝謝。

+6

一旦你在發言中有一個以上的表,你應該*送花兒給人*與相應的表別名的前綴列名。這樣你永遠不會得到這個錯誤。 – 2012-03-22 11:28:22

回答

43

您需要在SELECT部分(也許(vg.id, name))表名/別名:

SELECT (vg.id,name) FROM v_groups vg 
inner join people2v_groups p2vg on vg.id = p2vg.v_group_id 
where p2vg.people_id =0; 
4

我想你p2vg表還具有一個id字段,在這種情況下,Postgres的無法找到,如果在該ID SELECT指的是vg或p2vg。

你應該使用SELECT(vg.id,vg.name)刪除歧義

+0

是的,事實上,id字段是重複的。 – Fofole 2012-03-22 11:13:34

3
SELECT (vg.id, name) FROM v_groups vg 
INNER JOIN people2v_groups p2vg ON vg.id = p2vg.v_group_id 
WHERE p2vg.people_id = 0; 
0
SELECT vg.id, 
     vg.name 
    FROM v_groups vg INNER JOIN 
     people2v_groups p2vg ON vg.id = p2vg.v_group_id 
WHERE p2vg.people_id = 0;