Ошибка дублирования столбца SQL Duplicate
Я пытаюсь найти ошибку в массивном 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, но это не помогло.
Я просто не вижу, откуда может произойти ошибка повторяющегося столбца. Может быть проблема с целостностью базы данных?
Любая помощь очень ценится.
Ответы
Ответ 1
В таблицах 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
Ответ 2
Замените "select *" на "select col1, col2...", и ошибка должна стать очевидной (т.е. несколько столбцов с именем "ID" ). Ничего общего с целостностью или целостностью базы данных.
Ответ 3
у вас есть таблица под названием "Профили", и вы "создаете" временную таблицу "Профили" в своем "От", это было бы моим предположением о том, что вызывает проблему. вызовите свои бананы temp и попробуйте SELECT DISTINCT bananas.ID FROM
и посмотрите, работает ли это
Ответ 4
Как говорится в ошибке, каждая из таблиц, с которыми вы соединяетесь, имеет столбец с именем ID
. Вам нужно указать, в каком столбце ID
вы хотите (Profiles.ID
или FriendList.ID
), или включить ID
в условия соединения.
Ответ 5
В профилях и FriendList есть столбец идентификатора. Вы запрашиваете полное соединение "Профили", а затем используете Profiles.ID, но SQL не знает, какой идентификатор вы имеете в виду.