вычитание двух столбцов после первого добавления двух столбцов вместе

Я правильно изучаю SQL, и у меня возникли небольшие проблемы с запросом, который я хочу реализовать на своей веб-странице. Я размещаю свою веб-страницу на своем собственном сервере и использую MySQL Workbench ver. 5.2.47CE (последняя). Теперь для создания моей веб-страницы я использую Adobe Dreamweaver CS6.

Что я хочу сделать, так это добавить 2 столбца вместе и вычесть эту сумму из другого столбца. A - ( B + C ) = 'result'

Это основано на игре, где A = ВСЕГО СМЕРТЕЙ И B+C = ВСЕГО УБИЙСТВ. Если я вычту эти два, я получу ПОЛНОЕ САМОУБИЙСТВО.

Это то, что я придумал атм......

SELECT
  (SELECT SUM(is_dead)
   FROM survivor
   WHERE (is_dead=1)
  )-
  ((SELECT SUM(bandit_kills)
     FROM survivor
    ) +
    (SELECT SUM(survivor_kills)
     FROM survivor)
   ) AS SUICIDES

Теперь, когда я запускаю этот запрос в MySQL Workbench, он работает! Я получаю правильный ответ!

Поэтому я правильно скопировал код и создал новый набор записей с SQL-запросом в Dreamweaver CS6. Когда я нажимаю кнопку TEST в создании нового набора записей, он возвращается с правильным значением, и все, кажется, проходит TEST. Я нажимаю OK, чтобы сохранить новый набор записей.

Здесь происходит ошибка. Когда я выбираю новый RECORDSET для вставки в таблицу, он выдает эту ошибку.

MySQL Error#: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) AS SUICIDES 

ГДЕ 0 = 1' в строке 1


person Peter Brennan    schedule 27.07.2013    source источник
comment
Судя по звуку, вы используете этот запрос для возврата результата, а другой — для вставки новой записи обратно в базу данных?   -  person Dev N00B    schedule 27.07.2013


Ответы (3)


Похоже, Dreamwaver каким-то образом переписывает ваш запрос, так что к нему добавляется WHERE 0 = 1. Если это добавлено непосредственно после предложения SELECT, это, очевидно, синтаксическая ошибка SQL.

Предполагая, что ваш столбец is_dead имеет только значения 0 и 1, вы можете сделать математику немного проще и иметь предложение from, которое должно привести Dreamwaver к правильному синтаксису:

SELECT SUM(is_dead) - ( SUM(bandit_kills) + SUM(survivor_kills) )
FROM survivor

Тем не менее это не объясняет, почему добавлено WHERE 0 = 1. См. http://sqlfiddle.com/#!2/336f4/2, чтобы поэкспериментировать.

person contradictioned    schedule 27.07.2013

зачем все эти подзапросы? Вам должно это понравиться.

      SELECT SUM(is_dead)-( SUM(bandit_kills)+ SUM(survivor_kills)) AS SUICIDES 
      FROM survivor   WHERE is_dead=1
person echo_Me    schedule 27.07.2013
comment
Поскольку WHEREpredicate также оценивается для сумм по bandit_kills иSurvival_kills, это не будет тем же самым результатом. - person contradictioned; 27.07.2013

СПАСИБО противоречило, это то, что я искал....

запрос

SELECT SUM(is_dead)
FROM survivor

дает мне сумму всех игроков в таблице is_dead со значением 1 (1 мертв)

Спасибо большое...

person Peter Brennan    schedule 28.07.2013