Mysql 比较聚合中两个表中的多个内容

Mysql 比较聚合中两个表中的多个内容,mysql,aggregate-functions,group-concat,Mysql,Aggregate Functions,Group Concat,我有以下MySQL表: mysql> select * from answer; +----+------------+------------+----------+ | id | questionId | responseId | optionId | +----+------------+------------+----------+ | 1 | 1 | 1 | 1 | | 2 | 1 |

我有以下MySQL表:


mysql> select * from answer;
+----+------------+------------+----------+
| id | questionId | responseId | optionId |
+----+------------+------------+----------+
|  1 |          1 |          1 |        1 |
|  2 |          1 |          2 |        2 |
+----+------------+------------+----------+

mysql> select * from `option`;
+----+-------+------+------------+
| id | label | text | questionId |
+----+-------+------+------------+
|  1 | yes   | Yes  |          1 |
|  2 | no    | No   |          1 |
+----+-------+------+------------+

mysql> select * from rule;
+----+-------+-----------+------------+
| id | label | condition | variableId |
+----+-------+-----------+------------+
|  1 | rule1 | any       |          1 |
|  2 | rule2 | all       |          1 |
|  3 | rule3 | none      |          1 |
+----+-------+-----------+------------+

mysql> select * from rule_options_option;
+--------+----------+
| ruleId | optionId |
+--------+----------+
|      1 |        1 |
|      2 |        1 |
|      3 |        1 |
|      3 |        2 |
+--------+----------+

mysql> select * from variable;
+----+-----------+----------+
| id | label     | surveyId |
+----+-----------+----------+
|  1 | variable1 |        1 |
+----+-----------+----------+
我试图让输出看起来像这样:

answerId|optionId|optionLabel|var1             |
--------|--------|-----------|-----------------|
       1|       1|yes        |rule1,rule2      |
       2|       2|no         |rule1            |
根据这些规则:

规则1:

如果应答中存在规则\选项\选项中的任何选项ID,则该规则将显示在var1列中

规则2:

如果应答中存在规则\选项\选项中的所有选项ID,则该规则将显示在var1列中

规则3:

如果应答中不存在规则\选项\选项中的任何选项ID,则该规则将显示在var1列中

我将这个幼稚的实现放在一起,显然不起作用:

选择a.id作为应答id,o.id作为optionId,o.label作为optionLabel, 规则1.label为any,规则2.label为'all',规则3.label为none, GROUP_CONCATIFv.label='variable1',rule1.label,NULL为var1 从答案a 左连接o.id=a.optionId上的'option'o 左连接规则\u选项\u选项ro ON ro.optionId=a.optionId rule.id=ro.ruleId上的左外部联接规则 在rule1.condition='any'和rule1.id=any上左连接规则rule1从规则\u选项\u选项中选择ruleId 在rule2.condition='all'和rule2.id=ALLSELECT ruleId FROM rule_options_option上左连接规则rule2 规则3.condition='none'和规则3.id!=反规则 v.id=rule.variableId上的左连接变量v 按a.id分组 什么是完成我想做的事情的好方法


.

为了人类的爱,不要把桌子叫做“选项”@草莓lol。为什么?因为这是个保留字?我不明白。对于回答1,必须应用所有规则,因为规则_选项_选项;这三条规则都有关联,为什么只有规则1和2 A,为什么yhas回答的是规则2 1而不是规则3