嵌套MySQL查询和字母数字排序
所以,在我的代码中,我尝试将嵌套MySQL查询与表的字母数字顺序结合使用已有一段时间了 以下表为例:嵌套MySQL查询和字母数字排序,mysql,alphanumeric,nested-query,Mysql,Alphanumeric,Nested Query,所以,在我的代码中,我尝试将嵌套MySQL查询与表的字母数字顺序结合使用已有一段时间了 以下表为例: Subprocess_has_Characteristic{ ID (PK) SubProcessID (FK) CharacteristicID (FK) } 以下是该表的示例值: IDSubprocessIDCharacteristicID ID1子进程ID1特征1 ID2子进程ID1特征2 ID3子进程ID2特征1 ID4子流程ID2特征2 ID11子流程ID1特征化5
Subprocess_has_Characteristic{
ID (PK)
SubProcessID (FK)
CharacteristicID (FK)
}
以下是该表的示例值:
IDSubprocessIDCharacteristicID
ID1子进程ID1特征1 ID2子进程ID1特征2 ID3子进程ID2特征1 ID4子流程ID2特征2 ID11子流程ID1特征化5
这意味着我们需要以下MySQL查询以字母数字顺序排列表并避免以下情况:{ID1,ID10,ID11,ID2,ID3,…,ID9}并获得以下内容:{ID1,ID2,…,ID9;ID10,ID11}
SELECT *,substring(ID, 1, 2) as bcd,
CONVERT(SUBSTRING(ID, 2, 5),UNSIGNED INTEGER)
AS num from `Subprocess_has_Characteristic` order by bcd,num;
完成后,我当前在尝试将此查询嵌套到另一个查询中时遇到问题,原因是仅基于特定的子流程ID筛选查询,如下所示:
SELECT * FROM `Subprocess_has_Characteristic` WHERE `SubProcessID` = 'SubProcessID1'
如果我单独使用此查询,结果如下所示:
SELECT * FROM `Subprocess_has_Characteristic` WHERE `SubProcessID` = 'SubProcessID1'
IDSubprocessIDCharacteristicID
ID1子进程ID1特征1 ID11子流程ID1特征化5 ID2子进程ID1特征2
而我需要它显示如下:
SELECT * FROM `Subprocess_has_Characteristic` WHERE `SubProcessID` = 'SubProcessID1'
IDSubprocessIDCharacteristicID
ID1子进程ID1特征1 ID2子进程ID1特征2 ID11子流程ID1特征化5
这就是我试图通过嵌套前面提到的两个MySQL查询来实现的。不幸的是,我的代码无法正常工作 我尝试使用的查询如下:
SELECT * FROM `Subprocess_has_Characteristic` WHERE `SubProcessID` = 'SubProcessID1' IN (
SELECT *,substring(ID, 1, 13) as bcd,
CONVERT(SUBSTRING(ID, 14, 20),UNSIGNED INTEGER)
AS num from `Subprocess_has_Characteristic` order by bcd,num);
不幸的是,这会产生以下错误:
#1241 - Operand should contain 1 column(s)
我的MySQL语法有错误吗
编辑
我将示例更改为更精确的案例场景;希望这有助于理解我试图实现的目标。是的,您的SQL语法中确实存在错误(实际上存在多个错误) 以下是要点
- where子句包含两个运算符(
和=
中的
),您实际想使用哪一个
- 子查询正在返回多个列,但对于
运算符,应该只返回一个列IN
- 分号(
)位于错误的位置;
Length()
返回ID
中的字符数。因此将首先对带有单个数字的ID
进行排序,依此类推
SELECT * FROM `Subprocess_has_Characteristic`
WHERE `SubProcessID` = 'SubProcessID1'
ORDER BY LENGTH(ID), ID;
你的问题不清楚。。。尝试更新问题添加适当的数据样本和预期结果按bcd,num;)更改order的最后2个字符按bcd订购,数量);我编辑了这篇文章,希望能让这个问题更容易理解。更正了(
;
)并且我不太清楚WHERE
子句的两个运算符的问题,因为=
用于第一个查询,而中的用于引入嵌套查询。尝试将
中的替换为嵌套另一个查询的FROM()
,但似乎没有帮助。第一个查询似乎没有按正确的顺序排列元素。但是,您的第二个查询100%有效!