そのため、ネストされた MySQL クエリをテーブルの英数字順と組み合わせて、しばらくの間コードで使用しようとしていました。
たとえば、次の表を見てください。
Subprocess_has_Characteristic{
ID (PK)
SubProcessID (FK)
CharacteristicID (FK)
}
以下は、テーブルの値の例です。
ID SubprocessID CharacteristicID
ID1 サブプロセスID1 特性ID1
ID2 サブプロセスID1 特性ID2
ID3 サブプロセスID2 CharacteristicID1
ID4 サブプロセスID2 特性ID2
... ... ...
ID11 サブプロセスID1 特性ID5
これは、テーブルを英数字順に並べ替えるために次の 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 サブプロセスID1 特性ID1
ID11 サブプロセスID1 特性ID5
ID2 サブプロセスID1 特性ID2
次のように表示する必要がありますが、
ID SubprocessID CharacteristicID
ID1 サブプロセスID1 特性ID1
ID2 サブプロセスID1 特性ID2
ID11 サブプロセスID1 特性ID5
これは、前述の 2 つの 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 構文にエラーはありますか?
編集
この例をより正確なケース シナリオに変更しました。これが私が達成しようとしていることを理解するのに役立つことを願っています。