所以,我一直试图在我的代码中使用嵌套的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语法有错误吗?
修改的
我将示例更改为更精确的案例场景;希望这有助于理解我正在努力实现的目标。
答案 0 :(得分:1)
Length()
函数返回ID
中的字符数。因此,具有单个数字的ID
将首先排序,依此类推......
SELECT * FROM `Subprocess_has_Characteristic`
WHERE `SubProcessID` = 'SubProcessID1'
ORDER BY LENGTH(ID), ID;
答案 1 :(得分:0)
是的,您的SQL语法确实存在错误(实际上有多个错误)。
以下是重点
=
和IN
),你真正想要使用哪一个?IN
运算符;
)位于错误的地方我恐怕不会引用你想要达到的目标,所以我无法帮助你进行适当的修正。