SQL Сравнивает имена столбцов из одной таблицы со значениями из другой, если выполняется определенное условие для значений таблицы 2

#sql #mariadb

Вопрос:

Вопрос может быть немного странным… Я работаю с двумя столами:

 MariaDB [criticaldb]> select * from commands;
 -------- ---------- ---------------------------------------------------------------------------------------------------------------- 
| cmd_id | command  | description                                                                                                    |
 -------- ---------- ---------------------------------------------------------------------------------------------------------------- 
|      1 | help     | Provides a list of available commands.                                                                         |
|      2 | announce | Generates an announcement of the message specified after the command.                                          |
|      3 | hotfix   | Prints a hotfix of the message specified after the command.                                                    |
|      4 | change   | Prints a changelog of the message specified after the command.                                                 |
|      5 | quote    | Generates a quote for the mentioned person with a custom string of text.                                       |
|      6 | embed    | Generates an embed with an ID. use `embed create ID`. Embeds and their IDs are saved in `./dicts/embeds.json`. |
|      7 | hug      | Use this command to hug someone or to demand hugs from others.                                                 |
|      8 | ttt      | Challenge another member to a game of Tic Tac Toe!                                                             |
 -------- ---------- ---------------------------------------------------------------------------------------------------------------- 

MariaDB [criticaldb]> select * from permissions;
 -------------------- ------ ------ ------ ------ ---------- ----------- ------- ------ -------- ------ ------- ------ 
| server_id          | warn | mute | kick | ban  | announce | changelog | embed | help | hotfix | hug  | quote | ttt  |
 -------------------- ------ ------ ------ ------ ---------- ----------- ------- ------ -------- ------ ------- ------ 
| 846354366851448842 |    2 |    2 |    3 |    4 |        4 |         4 |     4 |    1 |      4 |    0 |     0 |    0 |
 -------------------- ------ ------ ------ ------ ---------- ----------- ------- ------ -------- ------ ------- ------ 
 

Я пытаюсь сделать следующее: Игнорируя cmd_id из таблицы команд, я бы хотел, чтобы была выбрана команда, описание из таблицы команд, если для команды в таблице разрешений выполнено определенное условие, например, значение команды в таблице разрешений

Так что в этом случае выбор, который я хотел бы получить в результате, был бы

  ---------- ---------------------------------------------------------------------------------------------------------------- 
| command  | description                                                                                                    |
 ---------- ---------------------------------------------------------------------------------------------------------------- 
| help     | Provides a list of available commands.                                                                         |

| quote    | Generates a quote for the mentioned person with a custom string of text.                                       |
| hug      | Use this command to hug someone or to demand hugs from others.                                                 |
| ttt      | Challenge another member to a game of Tic Tac Toe!                                                             |
 ---------- ---------------------------------------------------------------------------------------------------------------- 
 

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

 MariaDB [criticaldb]> select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = N'permissions';
 ------------- 
| COLUMN_NAME |
 ------------- 
| server_id   |
| warn        |
| mute        |
| kick        |
| ban         |
| announce    |
| changelog   |
| embed       |
| help        |
| hotfix      |
| hug         |
| quote       |
| ttt         |
 ------------- 
 

Я надеюсь, что не прошу ничего невозможного, и я был бы признателен за любой ответ!

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

1. Это невозможно без использования динамического SQL для построения запроса. Я бы посоветовал вам рассмотреть возможность переформатирования permissions , чтобы иметь только 3 столбца server_id, command, permissions , тогда это становится тривиальным. Как правило, относительно легко свернуть эту форму данных, чтобы создать внешний вид вашей текущей таблицы разрешений (если это требуется) в вашем прикладном программном обеспечении.

2. Я понимаю, что вы имеете в виду, спасибо. Я думаю, что это хорошая альтернатива тому, что я пытаюсь сделать уже более 2 часов.