0

我正在尝试将 3 个表连接在一起,并可能从任何列中检索数据。

我有一个产品和一种生活方式以及一个“映射表”,它基本上包含两者之间的引用。

我想使用连接正确地做到这一点 - 但事实证明它很麻烦。如果我使用“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 回答