Выбор неоднозначного столбца из подзапроса - PullRequest
0 голосов
/ 11 мая 2018

Предположим, у нас есть следующий запрос:

       select c.a, c.b, c.d
        from
           (select * from 
             tab1 join tab2
             on tab1.id = tab2.id)c

Я получаю следующую ошибку: ERROR: 42702: column reference "d" is ambiguous

Как бы это исправить?Могу ли я сделать что-то вроде c.tab1.id ?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Ошибка возникает из-за того, что оба столбца tab1 и tab2 имеют столбец с именем d.

Самое простое решение - исключить подзапрос:

select ?.a, ?.b, ?.d
from tab1 join
     tab2
     on tab1.id = tab2.id

The ? - это заполнитель для таблицы, откуда берется столбец.

Если вам нужен подзапрос, вам следует аналогичным образом использовать квалифицированные имена столбцов вместо select *, чтобы вы могли определить, откуда поступают столбцы.

0 голосов
/ 11 мая 2018

Вы можете написать свой запрос как:

SELECT a, b, d FROM (SELECT tab1.a AS a, tab1.b AS b, tab2.c AS c, tab2.d AS d
FROM tab1 JOIN tab2 ON tab1.id = tab2.id)c;
...