我有这样的表设置。
id plan_id name rule
1 3 dep 4
2 3 sta 3
5 4 pri 7
6 1 dep 4
可读的传奇; dep = department,sta = status,pri = priority
我的想法是想要检索' plan_id'符合指定的标准。我已经尝试了一些我认为可行的不同查询。这是最接近的。我试图弄清楚如何最好地构建查询。虽然我想知道是否有更好的方法来编写此查询。在某些情况下,只有部门可能需要匹配。在其他情况下,我可能需要匹配所有三个或两个。
在这种情况下,我想找到包含状态和部门的计划。我需要它来匹配状态== 3和部门== 4.下面的代码应返回' 3'对于plan_id。
SELECT o.plan_id AS s_id
FROM `plan_criteria` o
LEFT JOIN plan_criteria pc
ON pc.plan_id=o.plan_id
WHERE (o.name IN ('sta') AND o.rule_match=3)
AND (pc.name IN ('dep') AND pc.rule_match=4)
编辑 -
计划还可以包含多个部门/状态/优先级。
答案 0 :(得分:0)
您不需要进行加入,只需执行"选择不同的plan_id ......"使用适当的where子句。我也重新审视你的逻辑。你的意思是:
((pc.rule = 3 AND pc.rule = 4)或(pc.name =' sta' AND pc.name =' dep');
在这种情况下,您最终会得到3和1的结果集。
还有一个编辑:-)更仔细地看,如果'名称'列实际上包含值" department"," status"和" priority"您可能希望将这些表重新设计为列。像这样的查询真的不应该是一个大问题,你只需要正确布局表。
答案 1 :(得分:0)
SELECT o_plan_id
FROM `plan_criteria`
WHERE `o_name` = "sta"
AND `rule_match` = "3"
AND `pc_name` = 'dep'
AND `pc_rule_match` = '4'
我会把两者放在一起,只需在表格中使用o_和pc_来简化内容。只要你的桌子不要太疯狂