选择与不同值匹配的行以检索公共字段

时间:2015-07-03 18:33:50

标签: mysql search join criteria

我有这样的表设置。

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)

编辑 -

计划还可以包含多个部门/状态/优先级。

2 个答案:

答案 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_来简化内容。只要你的桌子不要太疯狂