最も明白な説明は、あなたが文字列で数学をやろうとしているということです...
The attempted conversion of a character string to a number failed because the character string was not a valid numeric literal. Only numeric fields or character fields containing numeric data may be used in arithmetic functions or expressions. Only numeric fields may be added to or subtracted from dates.
http://ora-01722.ora-code.com/
更新#1:
あなたの説明は私を心配:
I am trying to use a subquery that returns a comma delimited string in a IN clause.
Y ではないは、カンマで区切られた文字列を返します(g.group_id
が文字列で、カンマ区切りの文字列が必要な場合を除く)。必要に応じて行数を増やす必要があります(とにかく1,000未満)。
更新#2:
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO;
FOO_ID
----------------------
1
2
3
あなたはこれを行うことができます:
ちょうどそれを明確にする
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN (1, 2);
FOO_ID
----------------------
1
2
をしかしないこの:
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN ('1,2');
SQL Error: ORA-01722: invalid number
数字1
を文字列'1,2'
と比較することはできません。別名GROUP_PATH
を参照するために、あなたはORDER BY句で参照する前に別名が定義されているネストされたサブクエリを使用する必要がありますする必要があり、最低でも
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL
);
FOO_ID
----------------------
1
2
SELECT *
FROM (
SELECT 1 AS FOO_ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL
) FOO
WHERE FOO_ID IN (
SELECT '1,2' AS FOO_ID FROM DUAL
);
SQL Error: ORA-01722: invalid number
3つのテーブルすべてに対してテーブル定義(特にidカラムタイプ)を表示できますか? ':other_id'はどのように定義されていますか?あなたは数字だけを持っていると思うvarcharに数値列を結合しているかもしれませんし、数値にしか一致しないかもしれませんし、関連性がないと思っている数値以外の値にトリップしています。 –
最初のクエリが間違っていたことに気付きました。私はそれを更新しました。 – Kel
'other'の' person_ids'はコンマ区切りのリストですか?もしそうなら、それは 'IN'節では動作しません。文字列をコレクションとして解析し、そのコレクションをクエリで使用する必要があります。しかし、最初はリレーショナルデータベースにカンマで区切ったキーのリストを格納してはいけませんので、おそらくデータモデルを修正したいと考えています。 –