Ошибка представления в PostgreSQL

Я добавляю это: новый Vector3 (target.position.x, target.position.y, -9)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RailCameraFollow : MonoBehaviour {

    public Transform target;
    public Vector3 offset;

    void LateUpdate()
    {
        transform.position = new Vector3(target.position.x, target.position.y, -9) + offset;
    }
}
13
задан casperOne 6 May 2012 в 13:22
поделиться

3 ответа

Это происходит, потому что представление имело бы два идентификатора названными столбцами, один от table1 и один от table2, из-за выбора *.

Необходимо указать, какой идентификатор Вы хотите в представлении.

SELECT table1.id, column2, column3, ... FROM table1, table2 
WHERE table1.id = table2.id

Запрос работает, потому что он мог одинаково назвать столбцы...

postgres=# select 1 as a, 2 as a;
 a | a
---+---
 1 | 2
(1 row)

postgres=# create view foobar as select 1 as a, 2 as a;
ERROR:  column "a" duplicated
postgres=# create view foobar as select 1 as a, 2 as b;
CREATE VIEW
15
ответ дан 1 December 2019 в 21:25
поделиться

Никакой встроенный путь на языке для решения его (и откровенно говоря, * плохая практика в целом, потому что это может заставить скрытые дефекты возникать как схемы таблицы, не изменяется - можно сделать table1.*, table2.acolumn, tabl2.bcolumn, если Вы хотите всю одну таблицу и выборочно от другого), но если PostgreSQL поддерживает INFORMATION_SCHEMA, можно сделать что-то как:

DECLARE @sql AS varchar

SELECT @sql = COALESCE(@sql + ', ', '') 
    + '[' + TABLE_NAME + '].[' + COLUMN_NAME + ']'
    + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN ('table1', 'table2')
ORDER BY TABLE_NAME, ORDINAL_POSITION

PRINT @sql

И вставьте результаты в сохранить большой ввод. Необходимо будет вручную исказить столбцы, которые имеют то же имя, конечно. Вы можете также уникальные имена генерала кода, если Вам нравится (но я не делаю):

SELECT @sql = COALESCE(@sql + ', ', '') 
    + '[' + TABLE_NAME + '].[' + COLUMN_NAME + '] '
    + 'AS [' + TABLE_NAME + '_' + COLUMN_NAME + ']'
    + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME IN ('table1', 'table2')
ORDER BY TABLE_NAME, ORDINAL_POSITION
-2
ответ дан 1 December 2019 в 21:25
поделиться

If only join columns are duplicated (i.e. have the same names), then you can get away with changing:

select *
from a, b
where a.id = b.id

to:

select *
from a join b using (id)
13
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: