Новичок в SQL, нужна помощь с запросом - PullRequest
1 голос
/ 26 июня 2009

У меня есть собственная таблица базы данных, для которой я пытаюсь создать запрос, который кажется достаточно простым, но я чувствую, что я где-то путаюсь, потому что результаты не такие, какими они должны быть.

У меня в основном есть таблица, подобная следующей:

Таблица: данные

Колонки:

Row      ID           Profile     Import ID     Field ID        Product
1         5            Null           5           60              Can
2         0            Null           5           65              Hat
3         0            Null           5           70              Box
4         6            Null           6           60              Fish

В основном я хочу взять слово «Шляпа» в строке 2 и поместить его в столбец «Профиль» строки 1, заменив там нулевое значение. Я делаю это для нескольких строк.

В случае нескольких строк я хочу взять столбец «Профиль» и сделать его равным столбцу «Продукт». Я хочу, чтобы это происходило только в тех строках, где значение «ID» совпадает с «Import ID», и где «Field ID» определенно равен 65. В приведенном выше примере «ID» 5 соответствует «Import ID» 5, поэтому я хочу взять значение «Product» «Hat», где «Field ID» равно 65, и поместить это значение в столбец «Profile», где идентификатор равен 5. Моя таблица содержит более 9000 строк, и таким образом пришлось бы изменить 600, при этом для различных идентификаторов требуются различные продукты.

Результат, который я хотел бы получить:

Row      ID           Profile     Import ID     Field ID        Product
1         5            Hat           5           60              Can
2         0            Null          5           65              Hat
3         0            Null          5           70              Box
4         6            Null          6           60              Fish

Я молюсь, чтобы это имело смысл ...

Мой запрос был таким

ОБНОВЛЕНИЕ «Данные» SET 'Profile' = 'Product' WHERE 'ID' = 'Import ID' И 'Field ID' = 65;

Я также пробовал подзапрос

ОБНОВЛЕНИЕ «Данные» SET 'Profile' = (ВЫБЕРИТЕ 'Product' ИЗ ДАННЫХ, ГДЕ 'Field ID' = 65) WHERE 'ID' = 'Импорт ID';

Это не сработало, и мне просто интересно, есть ли какая-то логика, которую я пропустил. Спасибо всем, кто может помочь, я немного пытался понять это ...

Ответы [ 2 ]

1 голос
/ 26 июня 2009

Вам необходимо объединить данные; что-то вроде:

UPDATE d1
SET d1.Profile = d2.Product
FROM [Data] d1 -- dest
INNER JOIN [DATA] d2 -- source
    ON d2.[Import ID] = d1.[ID] AND d2.[Field ID] = 65

( примечание поменять местами 2 столбца ...)

0 голосов
/ 26 июня 2009

Пара вещей, которые нужно иметь в виду при изучении sql:

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

    Чтобы обойти вашу проблему, возможно, вам следует попытаться заключить имя столбца в кавычки (`) или в квадратные скобки ([]).

    в любом случае, вместо пробела, обратите внимание на подчеркивание.

  2. Имея это в виду, вы также должны помнить, что не ставить имена столбцов в кавычки. что-то вроде

    ВЫБРАТЬ «Продукт» ИЗ ДАННЫХ, ГДЕ «Идентификатор поля» = 65

    не будет работать по двум причинам:

    а. Выбор цитируемого текста вернет этот цитируемый текст. как и в случае, когда предложение where возвращает две строки, текст 'Product' будет возвращен дважды.

    б. здесь ваше предложение where сравнивает текст «ID поля» с числом 65, которое всегда будет ложным.

надеюсь, что поможет

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