Нужен SQL-запрос для поиска наилучших возможных ответов на основе различий в буквах

#sql #string #postgresql #substring #letter

#sql #строка #postgresql #подстрока #письмо

Вопрос:

У меня есть 2 таблицы, таблица A и таблица B.

Таблица A содержит 2 сеанса. столбец «догадки» — это предположения, а столбец «правильная буква в правильном положении» указывает, как подсказывает название, какие буквы в предположениях были в правильном положении. Каждый сеанс имеет 1 правильный ответ,

   Table A

   Session       Guesses     Correct_letter_in_correct_position     Correct letter_in_wrong_position
      1             ABDC                    2                                        2
      1             ABCF                    3                                        0
      1             BAFD                    1                                        2
      2             EFGD                    3                                        0
      2             EFHG                    2                                        2
      2             EFGI                    3                                        0
  

Таблица B содержит все возможные ответы, включая правильный ответ и неправильные ответы
Например:

 Table B

Possible_answers
    ABCD
    PQRS
    BCDA
    RSTU
    ..
    ..`etc
  

`

Мне нужен запрос / логика в SQL, чтобы получить наилучший возможный ответ на основе таблицы A и таблицы B таким образом, запрос выдает вывод, подобный этому, который показывает точные правильные ответы

 Session   Best_possible_answer
   1             ABCD 
   2             EFGH 
  

или как этот, который показывает все возможные ответы, которые могут быть возможны

 Session     Best_possible_answer
   1                ABCD
   1                BACD
   1                ..
   2                EFGH
   2                EFGJ
   2                EFGK
  

ПРИМЕЧАНИЕ: Наилучшие возможные ответы должны быть получены из таблицы B

Комментарии:

1. Я не понимаю, для чего вам нужна таблица B. Похоже, вам просто нужны предположения из таблицы A, которые имеют наилучшее соответствие в сеансе (максимум правильной позиции неправильная позиция, затем максимум правильной позиции в случае ничьей). Я ошибаюсь?

2. И, пожалуйста, сообщите нам, какую СУБД вы используете. Еще лучше было бы знать СУБД и версию 🙂 Вопросы SQL всегда должны быть помечены СУБД, потому что ответы могут сильно различаться в зависимости от этого.

3. Нет, предположения из таблицы A неверны, но дают подсказку о том, насколько близко должны располагаться буквы. Используя это, мне нужно найти наилучшее возможное предположение из таблицы B для отображения в выходных данных

4. postgresql @ThorstenKettner

5. Хорошо. Это очень похоже на игру Master Mind. Я бы не стал решать такую головоломку в SQL. Это может быть решаемо с помощью перекрестного соединения и последующего взвешивания ответов по совпадениям позиций и совпадениям букв каким-либо образом. Не знаю, может быть, нет. Если бы это было так, то SQL мог бы подойти для этого. но необходимый процесс, скорее всего, является итеративным. Итерации в SQL выполняются с помощью рекурсивных запросов, но язык программирования должен быть лучшим инструментом здесь.