2011-12-27 3 views
0

У меня есть две таблицы, одна из которых называется 'гильдии', а одна называется * 'guild_colours' *. Поля в пределах * guild_colours *: id и цвет (I.E: 1: FFFFFF, 2: 000000 ..), таблица гильдий должна содержать шестнадцатеричное значение для цвета. Поскольку доступные цвета внутри * guilds_colours * постоянно меняются (однако ранее доступные цвета приемлемы).Sub Select Inside UPDATE

Мне нужно запустить запрос UPDATE, когда пользователь решает изменить цвет своей гильдии. Я начал придумывать что-то вроде этого

UPDATE guilds g 
    SET g.primarycolour = (SELECT colour FROM guild_colours WHERE id = ?),         
    g.secondarycolour = (SELECT colour FROM guild_colours WHERE id = ?) 
    WHERE g.id = ? 

Мне было интересно, можно ли что-нибудь сделать быстрее?

+0

О чем говорит 'id' в guild_colours? Если это всего лишь идентификатор цвета, нет необходимости даже присоединяться, если вы проверяете цвета против списка и даете свое правило, что «ранее доступные цвета приемлемы». – pdubs

ответ

2

Попробуйте

UPDATE guilds AS g 
SET g.primarycolour = (
    SELECT c.colour FROM table_name AS c 
    WHERE c.id = 1 
), g.secondarycolour = (
    SELECT c.colour FROM table_name AS c 
    WHERE c.id = 2 
) 
WHERE g.id = 1 

Примечание: Я не проверял, хотя.

+0

Да, я придумал что-то подобное (см. Оригинальное сообщение). Точно так же, как дважды проверять то, что я делаю, они наиболее эффективны. :П – DominicEU