我正在尝试将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
有什么建议吗?
答案 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(取决于连接的基数)。