У меня есть простая таблица OriginalValidLeaders
с одним столбцом LeaderType
.
Leader A
Leader B
Leader C
Теперь я хочу случайным образом назначить их друг другу, например (это нормально, если некоторые из них не меняются местами):
Leader A | Leader C
Leader B | Leader A
Leader C | Leader B
В этом вопросе решение состоит в том, чтобы использовать row_number()
, однако по какой-то причине мой SQLite не поддерживает это, поэтому я попробовал следующий запрос, и онработает:
SELECT L.LeaderType, R.LeaderType
FROM OriginalValidLeaders L
LEFT JOIN
(
SELECT LeaderType
FROM OriginalValidLeaders
ORDER BY random()
) R
ON L.rowid = R.rowid;
Однако, если честно, это был результат одной из моих попыток удачи, и я не понимаю, почему это работает.Сначала я попробовал INNER JOIN
(что более логично для меня), но результат не вернулся.
Итак, мои вопросы:
- Почему LEFT JOIN работает, а не INNER JOIN?
- Всегда ли это работает для всех случаев?
Схема / данные тестирования (кредит forpas):
CREATE TABLE OriginalValidLeaders (LeaderType TEXT);
INSERT INTO OriginalValidLeaders (LeaderType) VALUES
('Leader A'), ('Leader B'), ('Leader C');