SQL вставить и обновить вопрос .. несколько запросов в одном утверждении - PullRequest
2 голосов
/ 13 апреля 2009

У меня есть таблица аукционов, в которой есть различные столбцы, такие как имя пользователя, идентификатор аукциона (первичный ключ), имя, фамилия, местоположение и т. Д., А также столбец категории. Столбец категории по умолчанию пуст, если он не заполнен пользователем для конкретной записи.

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

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

Например, если у меня есть следующие таблицы:

auctions

auctionid   username    firstname   lastname    category
------------------------------------------------------------------------
1       zerocool    john        henry       
2       fredflint   fred        smith       
3       azazal      mike        cutter

Затем, после обновления второй записи, вы получите следующую категорию:

2       fredflintsoner  fred        smith       shoes

Полученная таблица пользователей должна быть:

users

username    shoes   pants   belts   misc1   misc2
--------------------------------------------------
fredflint   true    

Без записи ранее существовало.

Если в таблице аукционов существуют дополнительные аукционы с тем же именем пользователя, например:

7       fredflint   fred        smith   belts

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

username    shoes   pants   belts   misc1   misc2
--------------------------------------------------
fredflint   true        true

Ответы [ 2 ]

2 голосов
/ 13 апреля 2009

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

1 голос
/ 14 апреля 2009

На ум приходит пара вопросов. Во-первых, ваша пользовательская таблица выглядит денормализованной. Что происходит, когда вы добавляете новую категорию? Рассмотрим пользовательскую таблицу в виде:

id username category

Если у вас несколько строк, если у пользователя несколько категорий:

1 fredflint shoes
2 fredflint pants
....

Второй вопрос, который у меня есть, зачем вам вообще таблица пользователей? Похоже, что вся информация в таблице пользователя уже хранится в таблице аукциона! Вы можете получить пользовательскую таблицу просто:

select distinct username, category
from auctions

Если вам нужна отдельная таблица, можно вручную обновить таблицу при создании нового аукциона. Я бы сделал это так (я знаю достаточно о триггерах, чтобы их избежать):

1 - убедитесь, что для этого пользователя есть строка

   if not exists (select * from users where username = 'fredflint')
       insert into users (username) values ('fredflint')

2 - убедитесь, что он категории обуви

   if not exists (select * from users where username = 'fredflint' and shoes = 1)
       update users set shoes = 1 where username = 'fredflint'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...