Ошибка SQL в имени дублированного столбца - PullRequest
12 голосов
/ 13 февраля 2012

Я пытаюсь найти ошибку в массивном операторе SQL (не моем) - я вырезал много из него, чтобы сделать его читаемым - даже при урезании он все равно выдает ошибку

SELECT DISTINCT Profiles.ID 
FROM 
   (select * from Profiles RIGHT JOIN FriendList ON (FriendList.Profile = 15237) 
    order by LastLoggedIn DESC ) as Profiles

Это возвращает ошибку

Повторяющееся имя столбца 'ID'

Я протестировал последнюю часть (select * from Profiles ... order by LastLoggedIn DESC), и она отлично работает сама по себе

Я попытался устранить неполадку, изменив имена столбцов в разделе DISTINCT, но безуспешно.

Я прочитал одно решение: удалить DISTINCT, но это не помогло.

Я простоне могу понять, откуда может появиться ошибка дублирующегося столбца.Может ли это быть проблема целостности базы данных?

Любая помощь очень ценится.

Ответы [ 5 ]

12 голосов
/ 13 февраля 2012

Ваши таблицы Profile и FriendList имеют столбец ID.Поскольку вы говорите select *, вы получаете два столбца с именем ID в суб-выборе, который имеет псевдоним Profiles, и SQL не знает, к какому из них относится Profiles.ID (обратите внимание, что Profiles здесьотносится к псевдониму подзапроса, а не к таблице с тем же именем.

Поскольку вам нужен только столбец идентификатора, вы можете изменить его на:

SELECT DISTINCT Profiles.ID FROM 
( select Profiles.ID from Profiles RIGHT JOIN FriendList ON (FriendList.Profile = 15237) 
order by LastLoggedIn DESC ) as Profiles
1 голос
/ 13 февраля 2012

Замените «select *» на «select col1, col2 ...», и ошибка должна стать очевидной (то есть несколько столбцов с именем «ID»).Ничего общего с отчетливостью или целостностью базы данных.

0 голосов
/ 13 февраля 2012

Профили и FriendList имеют столбец идентификаторов.Вы просите назвать все объединение «Профили», а затем использовать Profiles.ID, но SQL не знает, какой идентификатор вы имеете в виду.

0 голосов
/ 13 февраля 2012

Как говорится в сообщении об ошибке, каждая из таблиц, к которым вы присоединяетесь, имеет столбец с именем ID. Вам нужно будет указать, какой ID столбец вы хотите (Profiles.ID или FriendList.ID) или включить ID в условия соединения.

0 голосов
/ 13 февраля 2012

у вас есть таблица с названием Profiles, и вы «создаете» временную таблицу с именем Profiles в вашем поле From, и я бы предположил, что является причиной проблемы. позвоните в свои временные бананы и попробуйте SELECT DISTINCT bananas.ID FROM и посмотрите, будет ли это работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...