0

3つのテーブルを結合して、任意の列からデータを取得しようとしています。

私は製品とライフスタイル、そして本質的に2つの間の参照を含む「マッピングテーブル」を持っています。

結合を使用して適切に実行したいのですが、面倒です。'WHEREs'を使用すると機能します。

ここにあります

これは私が期待するよりも多くの結果を返します-それはおそらく正しいことをしているのであって、私が望むことではありません!

SELECT DISTINCT PROFDESC.* 
FROM PROFDESC 
INNER JOIN PRODUCT ON PRODFUND.PRODCD = PRODUCT.PRODCD 
INNER JOIN PRODFUND ON PRODFUND.PDFDCODE = PROFDESC.PROFREF 
WHERE PRODFUND.PDFDTYPE = 2

これは正常に機能しますが、テーブルに「参加」しません。

SELECT DISTINCT PROFDESC.* 
FROM PROFDESC, Product, Prodfund 
WHERE 
PRODFUND.PRODCD = PRODUCT.PRODCD and  
PRODFUND.PDFDCODE = PROFDESC.PROFREF 
AND PRODFUND.PDFDTYPE = 2;

私の最初のものは文字通りAからBとBからCに参加していると思いますが、接続にはAからCを含めたいと思います

助言がありますか?

4

2 に答える 2

3

以前に定義したクエリのテーブルが必要なだけです。これはうまくいくはずです。

SELECT DISTINCT PROFDESC.* 
FROM PROFDESC 
INNER JOIN PRODFUND ON PRODFUND.PDFDCODE = PROFDESC.PROFREF     
INNER JOIN PRODUCT ON PRODFUND.PRODCD = PRODUCT.PRODCD 
WHERE PRODFUND.PDFDTYPE = 2
于 2012-09-26T14:30:55.700 に答える
1

参加するときは正しい順序を使用する必要があります

SELECT DISTINCT PROFDESC.*
FROM
    PROFDESC
    INNER JOIN PRODFUND
        ON PROFDESC.PROFREF = PRODFUND.PDFDCODE
    INNER JOIN PRODUCT
        ON PRODFUND.PRODCD = PRODUCT.PRODCD  
WHERE
    PRODFUND.PDFDTYPE = 2

しかし、なぜPRODUCTに参加するのですか?あなたはそれのどの列も参照していません。結合はどういうわけか結果を狭めますか?そうでない場合は、ドロップします。

SELECT DISTINCT PROFDESC.*
FROM
    PROFDESC
    INNER JOIN PRODFUND
        ON PROFDESC.PROFREF = PRODFUND.PDFDCODE
WHERE
    PRODFUND.PDFDTYPE = 2

たぶん、DISTINCTを削除することができます(結合のカーディナリティによって異なります)。

于 2012-09-26T14:34:59.817 に答える