带有“where in"的嵌套 MySql Select 语句条款

编程入门 行业动态 更新时间:2024-10-22 05:17:25
本文介绍了带有“where in"的嵌套 MySql Select 语句条款的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我会尽量详细说明这一点.我有一个带有 where in 子句的嵌套 select 语句,但是应该将 select 的嵌套部分解释为文字字符串(我相信这是正确的术语).然而 mysql 的默认行为导致了我不想要的结果.

I'll try to detail this the best I can. I have a nested select statement with a where in clause, but the nested part of the select should be interpreted as a literal string (I believe this is the right terminology). However the default behavior of mysql leads to a result I do not want.

select class from cs_item where code="007" +-------+ | class | +-------+ | 1,3 | +-------+

如果我在选择查询中明确键入in (1,3)",则以下是一个查询:

And the below is a query if I explicitly type "in (1,3)" as part of a select query:

select alpha,description from cs_quality where class in (1,3); +-------+-------------+ | alpha | description | +-------+-------------+ | STD | STD | | XS | XS | | 5 | Sch 5 | | 10 | Sch 10 | | 20 | Sch 20 | | 40 | Sch 40 | | 60 | Sch 60 | | 80 | Sch 80 | | 100 | Sch 100 | | 120 | Sch 120 | | 140 | Sch 140 | | 160 | Sch 160 | | XXS | XXS | | 15L | 150# | | 30L | 300# | | 40L | 400# | | 60L | 600# | | 90L | 900# | | 150L | 1500# | | 200L | 2000# | | 250L | 2500# | | 300L | 3000# | | 400L | 4000# | | 600L | 6000# | | 900L | 9000# | +-------+-------------+

但是当我去嵌套它以获得与我相同的结果时......

But when I go to nest this to get the same result I have...

select alpha,description from cs_quality where class in (select class from cs_item where code = "007") +-------+-------------+ | alpha | description | +-------+-------------+ | STD | STD | | XS | XS | | 5 | Sch 5 | | 10 | Sch 10 | | 20 | Sch 20 | | 40 | Sch 40 | | 60 | Sch 60 | | 80 | Sch 80 | | 100 | Sch 100 | | 120 | Sch 120 | | 140 | Sch 140 | | 160 | Sch 160 | | XXS | XXS | +-------+-------------+

这只是class in 1"的一部分……它对,3"组件犹豫不决.有没有办法将嵌套的选择解释为文字文本?

Which is just the part of "class in 1"... it balks on the ",3" component. Is there a way for the nested select to be interpreted as literal text?

谢谢大家,非常感谢.我在表述这个问题时遇到了一些麻烦,但会根据需要进行编辑.

Thanks all, much appreciated. I had a bit of trouble wording this question but will edit as needed.

推荐答案

规范化、规范化、规范化你的表,在本例中是表 cs_item.您不应在一个字段中存储多个(逗号分隔)值.

Normalize, normalize, normalize your tables, in this case table cs_item. You should NOT store multiple (comma separated) values in one field.

在你这样做之前,你可以使用:

Until you do that, you can use:

select alpha, description from cs_quality where FIND_IN_SET( class , (select class from cs_item where code = '007'))

select q.alpha, q.description from cs_quality AS q join cs_item AS i on FIND_IN_SET( q.class , i.class ) where i.code = '007'

但是这种对 JOIN 使用特殊函数而不是相等的方法会导致查询速度非常慢.存储逗号分隔的列表会导致大量其他问题.看这里:

But this kind of using special functions instead of equality for JOINs, leads to very slow queries. Storing comma separated lists leads to a ton of other problems. See here:

  • 在数据库列中存储逗号分隔列表真的那么糟糕吗?

简短的回答是:是的,很糟糕.

更多推荐

带有“where in"的嵌套 MySql Select 语句条款

本文发布于:2023-10-29 03:44:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1538625.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   语句   条款   quot   Select

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!