目前,我遇到在Posgtresql服务器中运行查询,有3个表包含客户信息,客户申请会员卡和客户付款如下:
表客户
customerid, name, lastname, age
表格付款
customerid, payment, product, date
表会员卡
customerid, membercardno, createddate, status
在我的系统中,有2种客户,例如常客和会员客户。
在这种情况下,我想查询这3个表中的所有2种客户。 例如:customerid,姓名,姓氏,年龄,会员卡,付款,产品,日期
对于我的疑问:
SELECT C.CUSTOMERID, C.NAME, C.LASTNAME, C.AGE,
M.MEMBERCARDNO, P.PAYMENT, P.PRODUCT, P.DATE
FROM CUSTOMER C,
MEMBERCARD M,
PAYMENT P
WHERE C.CUSTOMERID = M.MEMBERCARD AND
C.CUSTOMERID = P.CUSTOMERID
ORDER BY CUSTOMERID
在这种情况下,只能查询那些客户是会员客户。
如何查询这两类客户?这对我来说很难。
我们的专家提供的任何帮助都将非常感谢。
答案 0 :(得分:0)
您需要使用OUTER JOIN来提取会员卡数据,因为并非所有客户都有会员卡。
SELECT C.CUSTOMERID, C.NAME, C.LASTNAME, C.AGE,
M.MEMBERCARDNO, P.PAYMENT, P.PRODUCT, P.DATE
FROM CUSTOMER C
LEFT OUTER JOIN MEMBERCARD M
ON M.MEMBERCARD = c.CUSTOMERID
LEFT OUTER JOIN PAYMENT P
ON P.CUSTOMERID = C.CUSTOMERID
ORDER BY C.CUSTOMERID
OUTER JOIN是一个可选的连接 - 如果数据存在于根表中但在连接表中不存在,它仍将被返回。将此与INNER JOIN(您正在做的事情,虽然您可能没有意识到)进行对比,其中匹配数据必须存在于连接的两个表中才能返回结果。
此外,养成使用如上所示的ANSI样式连接的习惯,而不是原始查询中使用的旧式隐式连接。通过ANSI连接更容易理解它的用途。
祝你好运。