Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套MySQL查询和字母数字排序_Mysql_Alphanumeric_Nested Query - Fatal编程技术网

嵌套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

所以,在我的代码中,我尝试将嵌套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


这意味着我们需要以下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%有效!