从哪里开始sql查询

时间:2013-11-17 01:37:46

标签: sql oracle join oracle11g

这是我想要做的: 按公司显示没有被保险人的任何付款人的公司名称,联系人姓名和电话号码。 我不知道从哪里开始.........

SELECT PAYER.COMPANY_NAME, CONTACT_NAME, PHONE_NUM
FROM PAYER
JOIN PLAN ON PAYER.PAYER_ID = PLAN.PAYER_ID
JOIN POLICY ON PLAN.POLICY_ID =POLICY.POLICY_ID
JOIN INSURED ON POLICY.POLICY_ID = INSURED.POLICY_ID
JOIN MORTAL ON INSURED.MORTAL_ID = MORTAL.MORTAL_ID

我从哪里开始?

错误: ERD

2 个答案:

答案 0 :(得分:1)

我没有Oracle所以我无法测试我要发布的内容,但是看看这个概念而不是语法。通过在保险表上使用外部联接,当没有匹配但仍在保险表中引用的任何列的值将为NULL时,仍将返回记录。因此,通过使用查找NULL值的WHERE子句,您基本上可以执行所需的操作。

SELECT PAYER.COMPANY_NAME, PAYER.CONTACT_NAME, PAYER.PHONE_NUM 
FROM PAYER 
JOIN PLAN ON PLAN.PAYER_ID = PAYER.PAYER_ID 
JOIN POLICY ON POLICY.PLAN_ID = PLAN.PLAN_ID
LEFT OUTER JOIN INSURED ON INSURED.POLICY_ID = POLICY.POLICY_ID 
WHERE 
INSURED.POLICY_ID IS NULL

但是,这是你需要考虑的事情。付款人可以没有计划吗?计划可以没有政策吗?在任何一种情况下,他们都没有保险,但你必须扩展这个概念以涵盖这些条件。

答案 1 :(得分:1)

关于你的方案,我认为JOIN语句在这里没有任何关系。 我建议使用更加改进的FROM语句来考虑WHERE语句。

我希望更有用,但我没有足够的能力在我的Oracle服务器中从头开始构建数据库:导出数据库将有助于最终解决您的问题