2012-01-20 8 views
2

異なる表で複数の行を選択しようとしていますが、私が何をしても動作させることはできません。 私はこのエラーを取得する:列があいまいにOracle PL-SQLで定義されています

Error(14,1): PL/SQL: ORA-00918: column ambiguously defined 

コード(:newがあります理由です、これはトリガーの一部であり、注意してください):

SELECT brw.borage, bt.agelower, bt.ageupper 
INTO borAge, minAge, maxAge 
FROM Borrower brw, BookTitle bt 
    INNER JOIN BookCopy bc ON :new.bcID = bc.bcID 
    INNER JOIN BookTitle bt ON bt.isbn = bc.isbn 

注:BOOKTITLEはONE ageLowerとageUpper列があります。 borAge、minAge、maxAgeのような格言はありません。

+0

あなたは 'INTO'を行っているWhay?、あなたは結果を選択するか、テーブルの上にそれらを挿入したいのですか? – Lamak

+0

@Lamak borAge、minAge、maxAgeは、おそらく変数です(http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm#CJAJAAIG)。 –

答えて

6

トレの問題は、あなたが2倍samesの別名を持っているということです、これを試してみてください。


私は、これはあなたが本当に必要なものかもしれないと思う:

SELECT brw.borage, bt.agelower, bt.ageupper 
INTO borAge, minAge, maxAge 
FROM Borrower brw 
    INNER JOIN BookCopy bc ON :new.bcID = bc.bcID 
    INNER JOIN BookTitle bt ON bt.isbn = bc.isbn 
+0

borAge、minAgeおよびmaxAgeは変数です。あなたのコードがコンパイルされ、今すぐトリガーをテストする必要があります:) – David

+0

@David roger that! –

1

BookTitle btを2回定義します。

SELECT brw.borage, bt.agelower, bt.ageupper 
INTO borAge, minAge, maxAge 
FROM Borrower brw, BookTitle bt 
    INNER JOIN BookCopy bc ON :new.bcID = bc.bcID 
    INNER JOIN BookTitle bt2 ON bt2.isbn = bc.isbn 

をしかし、あなたは部分から上BOOKTITLEテーブルを置くため、これは、あなたがそれから予想以上の結果を与えることができます。

+0

bt.ageLower、bookTitle.ageupperと同じです。私は実験中にbookTitle.ageLowerに戻しました:/ – David

+0

申し訳ありませんが、私ははっきりしていませんでした:2番目のINNER JOINでは、WHERE句に定義されているもの、またはそのJOINで定義されているものを参照しますか?そのうちの1つの名前を変更して、それを意味する名前を使用します。 –

+0

hmm、最後の行を 'INNER JOIN bt ON bt.isbn = bc.isbn;'に変更しました。 'テーブルまたはビューが存在しません。 ' – David

関連する問題