Обновите таблицу SQL случайным значением от другой таблицы

Мы записали плагин для нашего IDE (IntelliJ в нашем случае), который следит, сколько потрачено времени на проект автоматически. API IDE позволяет Вам перечислить для событий как редактирования, изменяя окна, и т.д., таким образом, мы регистрируем запись каждый раз, когда что-то как этот происходит. Модуль создания отчетов смотрит на это необработанные данные и определяет общее время, проведенное на проект путем сравнения меток времени между записями. Если различие больше, чем 5 минут, оно предполагает, что никакая работа не была сделана в это время.

Это не прекрасно, и это не на 100% точно, но Вы действительно устраняете все подслушавшее из ручного отслеживания этого материала сами через некоторый внешний инструмент.

13
задан skaffman 17 August 2009 в 18:30
поделиться

2 ответа

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

UPDATE
    Products
SET
    DefaultImageId =
    (
        SELECT TOP 1
            Id
        FROM
            Images
        WHERE
            Images.ProductId = Products.Id
        ORDER BY
            NEWID()
    )

Это было помечено вниз, и добавлены комментарии, указывающие, что это не решает проблему. Я думаю, что путаница возникла из-за того, что люди не поняли, что исходный вопрос требует, чтобы для каждого продукта было выбрано случайное изображение, отсюда и предложение where с идентификатором продукта. Предоставили полный сценарий с набором данных ниже. Он добавляет пять продуктов и три изображения для каждого продукта. Затем случайным образом устанавливает идентификатор изображения по умолчанию для каждого продукта.

CREATE TABLE Products(Id INT, Name NVARCHAR(100), DefaultImageId INT NULL)

CREATE TABLE Images (Id INT, ProductId INT, Bytes VARBINARY(100))

INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(1, 'A', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(2, 'B', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(3, 'C', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(4, 'D', NULL)
INSERT INTO Products (Id, NAME, DefaultImageId) VALUES(5, 'E', NULL)

INSERT INTO Images (Id, ProductId, Bytes) VALUES(1, 1, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(2, 1, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(3, 1, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(4, 2, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(5, 2, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(6, 2, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(7, 3, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(8, 3, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(9, 3, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(10, 4, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(11, 4, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(12, 4, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(13, 5, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(14, 5, NULL)
INSERT INTO Images (Id, ProductId, Bytes) VALUES(15, 5, NULL)

UPDATE
    Products
SET
    DefaultImageId =
    (
        SELECT TOP 1
            Id
        FROM
            Images
        WHERE
            Images.ProductId = Products.Id
        ORDER BY
            NEWID()
    )

SELECT * FROM Products
10
ответ дан 1 December 2019 в 20:30
поделиться

Проверьте это.

Update Products
Set DefaultImageId = (
SELECT top 1 Id 
From Images 
Where 1=1
and Products.Id = Images.ProductId
ORDER BY NEWID()
)
1
ответ дан 1 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

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