Nano Hash - криптовалюты, майнинг, программирование

Столбец указан несколько раз

Я получаю сообщение об ошибке со следующим запросом sql. Это говорит

"Столбец "Тип" был указан несколько раз для "М"".

«М» после

(SELECT * FROM [ToolManagement].[dbo].[tblTools] K JOIN [ToolManagement].[dbo].[tblToolTypes] L ON K.ToolType = L.ToolType)

указывается в sql management studio.

    SELECT          A.EntryID, A.Time, B.Name, B.Number, C.Number, D.StationNr, E.Number, E.Pressure, F.Nickname, F.Number, G.Format, G.Format, G.ID2, H.Description, I.Comment, M.Description
    FROM            [...]   A
    JOIN            [...]   B ON A.EntryID = B.EntryID
    JOIN            [...]   C ON A.EntryID = C.EntryID
    JOIN            [...]   D ON A.EntryID = D.EntryID
    JOIN            [...]   E ON A.EntryID = E.EntryID
    JOIN            [...]   F ON A.EntryID = F.EntryID
    JOIN            [...]   G ON A.EntryID = G.EntryID
    JOIN            [...]   H ON A.EntryType = H.EntryType
    LEFT OUTER JOIN [...]   I ON A.EntryID = I.EntryID
    JOIN            (SELECT * FROM [...] K JOIN [...] L ON K.Type = L.Type) M ON A.ID = M.ID
    WHERE           A.ID = '1234'

  • что произойдет, если вы измените это SELECT * FROM [...] K JOIN [...] L ON K.Type = L.Type на SELECT k.* FROM [...] K JOIN [...] L ON K.Type = L.Type 20.10.2017
  • Вероятно, было бы неплохо соединить K и L вне скобок, а затем выбрать K.Type или L.Type вместо M.Type. 20.10.2017
  • Проблема здесь может заключаться в том, что эта часть SELECT * FROM [...] K JOIN [...] L ON K.Type = L.Type должна возвращать два одинаковых столбца. 20.10.2017

Ответы:


1

Проблема здесь в том, что в подзапросе, который вы назвали псевдонимом M, вы делаете SELECT *, а две таблицы, участвующие в объединении, имеют столбец Type. SQL Server справедливо жалуется, что не знает, какой столбец Type вы хотите выбрать.

Вы используете только столбец одного типа из своего подзапроса, а условие соединения гарантирует, что оба они одинаковы, поэтому просто выберите один из них:

SELECT
    A.EntryID, A.Time, B.Name, B.Number, C.Number, D.StationNr, E.Number,
    E.Pressure, F.Nickname, F.Number, G.Format, G.Format, G.ID2, M.Description,
    I.Comment, M.Type
FROM            [...]   A
JOIN            [...]   B ON A.EntryID = B.EntryID
JOIN            [...]   C ON A.EntryID = C.EntryID
JOIN            [...]   D ON A.EntryID = D.EntryID
JOIN            [...]   E ON A.EntryID = E.EntryID
JOIN            [...]   F ON A.EntryID = F.EntryID
JOIN            [...]   G ON A.EntryID = G.EntryID
JOIN            [...]   H ON A.EntryType = H.EntryType
LEFT OUTER JOIN [...]   I ON A.EntryID = I.EntryID
JOIN            (SELECT L.Type, L.Description FROM [...] K JOIN [...] L
                     ON K.Type = L.Type) M ON A.ID = M.ID
WHERE           A.ID = '1234'

Обратите внимание, что оператор select на верхнем уровне, безусловно, может иметь два или более столбцов/псевдонимов с одинаковыми именами. Проблема возникает только при попытке выбрать из такой таблицы.

20.10.2017
  • я исправил орфографическую ошибку; Мне нужно M.Description в первом операторе выбора 20.10.2017
  • @jimmmmyjooo Ответ обновлен. Я предположил, что L имеет столбец описания, хотя вы можете изменить его на K, если я ошибаюсь. 20.10.2017

  • 2

    Проблема в том, что ваш внутренний запрос выбирает столбец type как из K, так и из L. Видя, что ваш внутренний запрос выбирает каждый столбец из каждой таблицы, он, таким образом, будет иметь 2 столбца type в результате; 1 из K и один из L. Вам нужно убедиться, что возвращается только 1 столбец с именем type или что другой столбец имеет псевдоним, чтобы иметь другое имя.

    SELECT * FROM [...] K JOIN [...] L ON K.Type = L.Type

    K.Type и M.Type оба будут возвращены как M.type, и поэтому ваш внешний запрос не уверен, какой из двух следует вернуть. Если Type — единственный столбец, который вам действительно нужен из этого подзапроса, просто верните K.type:

    SELECT K.Type FROM [...] K JOIN [...] L ON K.Type = L.Type

    20.10.2017
  • я исправил орфографическую ошибку; Мне нужно M.Description в первом операторе выбора 20.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..