【发布时间】:2017-06-29 07:34:52
【问题描述】:
所以,我一直在尝试在我的代码中结合使用嵌套的 MySQL 查询和表的字母数字排序。
以下表为例:
Subprocess_has_Characteristic{
ID (PK)
SubProcessID (FK)
CharacteristicID (FK)
}
以下是表格的示例值:
ID SubprocessID CharacteristicID
ID1 SubprocessID1 CharacteristicID1
ID2 SubprocessID1 CharacteristicID2
ID3 SubprocessID2 CharacteristicID1
ID4 SubprocessID2 CharacteristicID2
... ... ...
ID11 SubprocessID1 CharacteristicID5
这意味着我们将需要以下 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;
完成后,我目前在尝试将此查询嵌套在另一个查询中以仅根据特定的 SubProcessID 过滤查询时遇到问题,如下所示:
SELECT * FROM `Subprocess_has_Characteristic` WHERE `SubProcessID` = 'SubProcessID1'
如果我单独使用这个查询,结果显示如下:
ID SubprocessID CharacteristicID
ID1 SubprocessID1 CharacteristicID1
ID11 SubprocessID1 CharacteristicID5
ID2 SubprocessID1 CharacteristicID2
而我需要它显示如下:
ID SubprocessID CharacteristicID
ID1 SubprocessID1 CharacteristicID1
ID2 SubprocessID1 CharacteristicID2
ID11 SubprocessID1 CharacteristicID5
这就是我试图实现嵌套前面提到的两个 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 语法有什么错误吗?
编辑
我将示例更改为更精确的案例场景;希望这有助于理解我想要实现的目标。
【问题讨论】:
-
您的问题不清楚...尝试更新问题,添加适当的数据样本和预期结果
-
将最后 2 个字符从 order by bcd,num;) 更改为 order by bcd,num);
标签: mysql alphanumeric nested-query