我想选择一个routing_id = 489的routing_id。
我使用SQL子查询,但会降低性能。
查询:
select routing_id
from ec.production_autoroutingtag
where tag_type = 'mounting_type'
AND tag_value='smd'
and routing_id in (select routing_id
from ec.production_autoroutingtag
where tag_type = 'x_ray'
AND tag_value='true'
and routing_id in (select routing_id
from ec.production_autoroutingtag
where tag_type = 'depaneling'
AND tag_value='false'
)
)
它工作正常,但是当行数更多时该怎么办,请给我最好的解决方案。
提前致谢。
问题来源:stackoverflow
好像
SELECT routing_id
FROM ec.production_autoroutingtag
WHERE (tag_type, tag_value) IN (('mounting_type', 'smd'),
('x_ray', 'true'),
('depaneling', 'false'))
GROUP BY routing_id
HAVING COUNT(DISTINCT tag_type, tag_value) = 3
如果您需要使用非等值条件来检查值,那么必须结合使用OR将条件分别检查每对(标记,值):
SELECT routing_id,
COUNT( tag_type)
FROM ec.production_autoroutingtag
WHERE (tag_type, tag_value) IN (('mounting_type','qfn'), ('panel_qty','1'))
OR (tag_type = 'bom' and tag_value >= '10')
OR (tag_type = 'cpl' and tag_value >= '158')
GROUP BY routing_id
HAVING COUNT(tag_type) = 4;
注意-比较“大于或等于”将按STRINGS进行(即“ 5”将为TRUE)!如果需要比较为数字,则必须对字段值使用正确的类型转换,对引用值使用正确的数据类型:
SELECT routing_id,
COUNT( tag_type)
FROM ec.production_autoroutingtag
WHERE (tag_type, tag_value) IN (('mounting_type','qfn'), ('panel_qty','1'))
OR (tag_type = 'bom' and tag_value + 0 >= 10)
OR (tag_type = 'cpl' and tag_value + 0 >= 158)
GROUP BY routing_id
HAVING COUNT(tag_type) = 4;
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。