我有个小问题要有个好的解决办法。我需要寻找更好的结果。
我有三个表,规则,意思和rule_meaning。规则可以有一个或更多的含义。
这是结果
SELECT * FROM rule, rule_meaning, meaning WHERE rule_meaning.rule_id = rule.id AND rule_meaning.meaning_id = meaning.i
rule.id rule.name rule.id meaning_id meaning.id meaning.name
1 RADIO - Ecouter 1 1 1 ACTIVER
1 RADIO - Ecouter 1 6 6 RADIO
2 LUMIERE Allumer 2 1 1 ACTIVER
3 RADIO + volume 3 6 6 RADIO
4 RADIO - volume 4 6 6 RADIO当我搜索激活器和无线电时,我只想要无线电耦合器(rule.id = 1)。
我试过了
发布于 2017-09-28 09:36:43
您希望选择同时具有活动和无线电含义的规则。您可以通过聚合来完成这一任务:
select *
from rule
where id in
(
select rule_id
from rule_meaning
where meaning_id in (select id from meaning where name in ('ACTIVER', 'RADIO'))
group by rule_id
having count(*) = 2 -- both meanings
);另一种我喜欢的方法是使用EXISTS或IN分别查找每个值。我在这里展示它,因为它是如何处理这项任务的简单方法。
select *
from rule
where id in
(
select rule_id
from rule_meaning
where meaning_id = (select id from meaning where name = 'ACTIVER')
)
and id in
(
select rule_id
from rule_meaning
where meaning_id = (select id from meaning where name = 'RADIO')
);发布于 2017-09-28 09:27:10
您可能需要使用case语句,例如
CASE WHEN WHERE meaning.name = ACTIVER AND meaning.name = RADIO
THEN ....
ELSE但我觉得你要问的是
WHERE meaning.name = ACTIVER AND rule.name = RADIO
AND rule.id = 1https://stackoverflow.com/questions/46465503
复制相似问题