我需要在SQL中创建一个我将在查询中使用的视图。
我使用下表:
customer (name:string,credit:integer)
loan (no:string,type:string,minCredit:integer)
borrower (cname:string,lno:string,due:date)
其中borrower.cname
和borrower.lno
是引用customer的外键,分别是loan,其键是name,分别是no(number)。属性loan.minCredit
表示a所需的最低信用额度
客户有资格获得该贷款。
我正在尝试创建一个显示客户和贷款的视图。
Create view LoansNotTaken AS
SELECT c.name, l.no
FROM customer c, loan l
WHERE NOT EXISTS(
SELECT c1.name,l1.no
FROM customer c1, loan l1, borrower b1
WHERE c1.name=b1.cname AND l1.no=b1.lno AND lno=l1.no AND c.name=c1.name)
我在第二个选择中的基本想法是获得他们已经成对的所有客户和贷款。然后,我试图使用not exists给我所有对,不包括那些。然而,只要客户没有拿出任何贷款,我的结果只会给我配对,我需要他们即使拿出一些也没有取出的那个。任何人都可以帮助我理解我在查询中做错了什么。
答案 0 :(得分:0)
如果您想要获得贷款,请分两步完成。首先,创建所有客户和所有贷款的清单。然后删除那些"采取"。
所以:
select c.name, l.no
from customers c cross join
loans l left join
borrowers b
on b.name = c.name and b.lno = l.no
where b.name is null;
答案 1 :(得分:0)
我在查询中弄清楚我做错了什么。但是,是的,我写了自己的表来测试这些并继续编辑它来测试不同的东西。如果我还有其他问题,请确保发布表格和结果,以便更轻松地回答。
这实际上就是我所拥有的,我添加了类型以获得更多数据。
Create view LoansNotTaken AS
SELECT c.name, l.no, l.type
FROM customer c, loan l
WHERE NOT EXISTS(
SELECT c1.name,l1.no
FROM customer c1, loan l1, borrower b1
WHERE b1.cname=c1.name AND lno=l1.no AND c.name = c1.name AND l.no=l1.no)
;
答案 2 :(得分:0)
查找共享相同贷款的客户名称对。避免将自己列入客户(例如,不列出(Joe,Joe))。还要避免重复以模数交换组件的相同对(例如,应该列出(John,Jane),(Jane,John)中的一个)。 我需要一个关系代数和关系元组微积分解决这个问题,谢谢! 额外限制:不要使用分组或聚合 我需要在查询
之上回答这个问题