Mysql 比较聚合中两个表中的多个内容
我有以下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> 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