加入3个表

时间:2012-09-26 14:25:30

标签: sql select join

我正在尝试将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

有什么建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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(取决于连接的基数)。