我试图加入一张桌子。
但是得到以下错误
SQL> select a.bookid, b.auname
2 from book_author a, book_author b
3 where a.bookid = b.auname;
where a.bookid = b.auname
*
ERROR at line 3:
ORA-01722: invalid number
我试图加入的表是:
create table book_author
(Auname varchar2(15),
bookid number(5),
对于每个bookid,我想列出bookid和每位作者(第2列)与他/她的共同作者(column3) 我想使用BOOK_AUTHOR的虚拟副本来做到这一点。 我想要的输出看起来像这样。
Bookid Author Coauthor
1101 Dilbert Emerson
1101 Dilbert Sartre
1101 Emerson Dilbert
1101 Emerson Sartre
1101 Sartre Dilbert
1101 Sartre Emeson
(note Dilbert Dilbert should not appear)
SQL> select * from book_author
2 order by bookid;
AUNAME BOOKID
--------------- ----------
Emerson 1101
Sartre 1101
Dilbert 1101
Sartre 1102
Axel 1102
Marquez 1103
Breese 1103
Young 1104
Groom 1104
Young 1105
Blake 1105
Julian 1105
Verde 1105
Scott 1105
Black 1106
Sartre 1106
Simon 2007
Emerson 2007
Pell 2007
Rogers 2008
Sartre 2008
Codd 2008
Young 2008
Lamont 2010
Fellows 2011
Modiano 2011
Poe 2222
Modiano 2222
Null 2229
答案 0 :(得分:2)
您想加入bookid
上的表格,您不想将bookid
(数字列)与auname
进行比较(a string column)。
像
这样的东西select a.bookid, a.auname, b.auname
from book_author a,
book_author b
where a.bookid = b.bookid
and a.auname != b.auname;
答案 1 :(得分:1)
Justin Cave得到了正确答案。作为补充:ORA-01722:无效数字表示您在一个表达式中混合number和varchar列。如果您没有明确说出您想要的内容,Oracle将使用隐式转换规则。在这种情况下,Oracle会尝试将b.auname转换为数字,因为您要将其与数值进行比较。
大多数情况下,这是一个错误,但很少是你想要的。如果是这样,你应该明确说出Oracle应该做什么:
where to_char(a.bookid) = b.auname