2014-11-10 1 views
1

Я пытаюсь создать COUNTRY_NAME, и пару чида страны между каждой страной, которые являются соседями:PostgreSql не смогли создать вид из-за «дубликат колонка»

Вот схема:

CREATE TABLE country (
    cid   INTEGER  PRIMARY KEY, 
    cname  VARCHAR(20) NOT NULL, 
    height  INTEGER  NOT NULL, 
    population INTEGER  NOT NULL); 

CREATE TABLE neighbour (
    country  INTEGER  REFERENCES country(cid) ON DELETE RESTRICT, 
    neighbor INTEGER  REFERENCES country(cid) ON DELETE RESTRICT, 
    length  INTEGER  NOT NULL, 
    PRIMARY KEY(country, neighbor)); 

Моего запрос :

create view neighbour_pair as (
select c1.cid, c1.cname, c2.cid, c2.cname 
from neighbour n join country c1 on c1.cid = n.country 
join country c2 on n.neighbor = c2.cid); 

Я получаю код ошибки 42701, что означает, что существует дубликат столбца.

Действительное сообщение об ошибке я получаю:

ERROR: column "cid" specified more than once 

********** Error ********** 

ERROR: column "cid" specified more than once 
SQL state: 42701 

Я не уверен, как обойти проблему ошибки, так как я хочу пару соседних стран с названием страны и их ИДС.

ответ

1

Nevermind. Я редактировал первую строку запроса и изменил имена столбцов

create view neighbour_pair as 

select c1.cid as c1cid, c1.cname as c1name, c2.cid as c2cid, c2.cname as c2name 
from neighbour n join country c1 on c1.cid = n.country 
join country c2 on n.neighbor = c2.cid; 
0

Вы можете использовать псевдоним с AS:

Например ваш взгляд может выглядеть следующим образом:

create view neighbour_pair as 
(
select c1.**cid** 
    , c1.cname 
    , c2.**cid AS cid_c2** 
    , c2.cname 
from neighbour n 
join country c1 on c1.cid = n.country 
join country c2 on n.neighbor = c2.cid 
); 
0

Я побежал в аналогичный вопрос в последнее время. У меня был вопрос:

CREATE VIEW pairs AS 

SELECT p.id, p.name, 
    (SELECT count(id) from results 
      where winner = p.id), 
    (SELECT count(id) from results 
      where winner = p.id OR loser = p.id) 
FROM players p LEFT JOIN matches m ON p.id = m.id 
GROUP BY 1,2; 

Ошибка говорит мне: ОШИБКА: столбец «count» указан более одного раза. Запрос WAS работает через psycopg2, однако, когда я привел его в файл .sql для тестирования, возникла ошибка.

я понял, что нужно было просто псевдоним 2 подсчета подзапросов:

CREATE VIEW pairs AS 
    SELECT p.id, p.name, 
     (SELECT count(id) from results 
       where winner = p.id) as wins, 
     (SELECT count(id) from results 
       where winner = p.id OR loser = p.id) as matches 
    FROM players p LEFT JOIN matches m ON p.id = m.id 
    GROUP BY 1,2; 
Смежные вопросы