PL/SQL“选择”来自类型与外部查询不同的值列表

发布于 2024-12-15 05:12:15 字数 533 浏览 3 评论 0原文

我有以下表格:

Table1 ( Col1 : varchar2, Col2 : number, Col3 : number)
Table2 ( Col1 : number, Col2 : varchar2, Col3 : varchar2)

我想运行这样的查询:

select distinct Col2 from Table1 where Col1 in 
(
   select Col1 from Table2
)

Table1.Col1 的类型为 varchar2,而 Table2.Col1 的类型为 number。所以,我需要做一些选角,但似乎没有成功。

问题是任何运行查询的尝试都会返回以下错误:

  ORA-01722: invalid number
  01722. 00000 -  "invalid number"
  *Cause:    
  *Action:

Table1.Col1 包含一些空值。

I have the following tables :

Table1 ( Col1 : varchar2, Col2 : number, Col3 : number)
Table2 ( Col1 : number, Col2 : varchar2, Col3 : varchar2)

I want to run a query like this :

select distinct Col2 from Table1 where Col1 in 
(
   select Col1 from Table2
)

Table1.Col1 is of type varchar2 while Table2.Col1 is of type number. so, I need to do some casting, it seems but it fails to succeed.

The problem is that any attempts to run the query returns the following error :

  ORA-01722: invalid number
  01722. 00000 -  "invalid number"
  *Cause:    
  *Action:

Table1.Col1 contains some null values.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛滥成性 2024-12-22 05:12:15

类似的东西

SELECT distinct col2
  FROM table1
 WHERE col1 IN (SELECT to_char(col1)
                  FROM table2)

应该有效。根据两个表的相对大小,执行 EXISTS 可能会更有效

SELECT distinct col2
  FROM table1 t1
 WHERE EXISTS( SELECT 1
                 FROM table2 t2
                WHERE to_char(t2.col1) = t1.col1 );

Something like

SELECT distinct col2
  FROM table1
 WHERE col1 IN (SELECT to_char(col1)
                  FROM table2)

should work. Depending on the relative size of the two tables, it may be more efficient to do an EXISTS instead

SELECT distinct col2
  FROM table1 t1
 WHERE EXISTS( SELECT 1
                 FROM table2 t2
                WHERE to_char(t2.col1) = t1.col1 );
不交电费瞎发啥光 2024-12-22 05:12:15

您的错误 ORA-01722 是因为您尝试将 varchar2 值放入 int 列的 IN 子句中。

您必须确保在 IN 子句中提供 int 值。给出相同的数据类型。

Your error ORA-01722 is because you're trying to put varchar2 values in an IN clause for an int column.

You've got to ensure that you're supplying int values in that IN clause. Give the same datatypes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文