Как установить случайный конкаталированный элемент в предложении where в mysql? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь создать случайное уникальное имя пользователя.У меня есть два столовых слога1 и слог2.Оба имеют два идентификатора столбца, слово.Я выбираю случайное слово из обеих таблиц и сопоставляю их.Теперь я хочу проверить это concat name NOT IN в моей пользовательской таблице. Например,

SELECT CONCAT((SELECT word FROM syllable1 ORDER BY RAND() LIMIT 1), (SELECT word FROM syllable2 ORDER BY RAND() LIMIT 1)) WHERE NOT IN (SELECT username FROM user)

Перед предложением WHERE, он прекрасно работает для генерации случайного имени.Пожалуйста, помогите на втором шаге.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Вы должны поместить предложение WHERE во внешний запрос:

SELECT t.username FROM (
  SELECT CONCAT(
      (SELECT word FROM syllable1 ORDER BY RAND() LIMIT 1), 
      (SELECT word FROM syllable2 ORDER BY RAND() LIMIT 1) 
    ) username
) t
WHERE t.username NOT IN (SELECT username FROM user)

См. Демоверсию .

1 голос
/ 02 мая 2019

Я предпочитаю иметь подзапросы в предложении FROM:

SELECT CONCAT(s1.word, s2.word)
FROM (SELECT word FROM syllable1 ORDER BY RAND() LIMIT 1) s1 CROSS JOIN
     (SELECT word FROM syllable2 ORDER BY RAND() LIMIT 1) s2
WHERE NOT EXISTS (SELECT 1
                  FROM user u
                  WHERE u.username = CONCAT(s1.word, s2.word)
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...