Данные копии от одной существующей строки до другой существующей строки в SQL?

Если вы хотите использовать вызов приватного метода внутри функции инициализации, я сомневаюсь, что нет метода, кроме allow_any_instance_of. А вставка строкового литерала the name в определение метода является неправильным синтаксисом.

Тем не менее, вы можете реорганизовать свой код, чтобы использовать test double для упрощения тестирования.

Код ниже демонстрирует мою идею:

setup.rb

class Player
  attr_reader :name
  def initialize(name)
    @name = name
  end
end

class Setup
  class Client
    def cli_input
      $stdin.gets.chomp.strip
    end
  end

  attr_reader :player

  def initialize(client)
    @client = client
    @player = new_player(cli_input)
  end

  private

  def cli_input
    @client.cli_input
  end

  def new_player(name)
    Player.new(name)
  end
end

setup_spec.rb

RSpec.describe Setup do
  describe 'initialize' do

    it 'creates a player assigned to a instance variable' do
      client = Setup::Client.new
      allow(client).to receive(:cli_input).and_return("John")
      setup = Setup.new(client)
      expect(setup.player.name).to eq('John')
    end
  end
end
43
задан Brian Tompsett - 汤莱恩 3 November 2015 в 09:59
поделиться

4 ответа

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

, Если это верно, Вы захотите использовать UPDATE... FROM оператор:

UPDATE MyTable
SET
    complete = 1,
    complete_date = newdata.complete_date,
    post_score = newdata.post_score
FROM
    (
    SELECT
        userID,
        complete_date,
        post_score
    FROM MyTable
    WHERE
        courseID = 6
        AND complete = 1
        AND complete_date > '8/1/2008'
    ) newdata
WHERE
    CourseID = 11
    AND userID = newdata.userID

Видят, что это связало ТАК вопрос для большего количества информации

71
ответ дан Community 26 November 2019 в 22:42
поделиться

ВЫБОР Использования для Вставки записей

INSERT tracking (userID, courseID, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent) 
SELECT userID, 11, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent
FROM tracking WHERE courseID = 6 AND course_date > '08-01-2008'
6
ответ дан Chris Doggett 26 November 2019 в 22:42
поделиться
UPDATE c11
SET
    c11.completed= c6.completed,
    c11.complete_date = c6.complete_date,
-- rest of columns to be copied
FROM courses c11 inner join courses c6 on
    c11.userID = c6.userID 
    and c11.courseID = 11 and c6.courseID = 6
     -- and any other checks

я всегда просматривал Из пункта обновления, как один из нормального выбора. На самом деле, если Вы хотите проверить то, что будет обновлено прежде, чем выполнить обновление, можно взять замену, обновление расстается с выбором c11.*. См. мои комментарии к ответу неудачника.

12
ответ дан eglasius 26 November 2019 в 22:42
поделиться

Скопируйте значение из одной строки в любую другую квалифицированную строку внутри одной и той же таблицы (или разных таблиц):

UPDATE `your_table` t1, `your_table` t2
SET t1.your_field = t2.your_field
WHERE t1.other_field = some_condition
AND t1.another_field = another_condition
AND t2.source_id = 'explicit_value'

Начните с наложения псевдонимов на 2 уникальных ссылки, чтобы SQL-сервер мог отличить их друг от друга

Далее укажите копируемое поле (поля).

Наконец, укажите условия, регулирующие выбор строк

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

11
ответ дан 26 November 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: