2

そのため、ネストされた 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 構文にエラーはありますか?

編集

この例をより正確なケース シナリオに変更しました。これが私が達成しようとしていることを理解するのに役立つことを願っています。

4

2 に答える 2