我尝试将DS中的名称与A中的ID匹配,并且只能通过DA连接,这基本上是客户ID和项ID。我还需要显示没有购买记录的项目。
我试过单独使用这两个条件, A部分
SELECT DS.name,A.id
FROM DS,
A,
DA
WHERE DS.id=DA.id AND
A.id=DA.id;
B部分
SELECT name
FROM DS,
WHERE DS.id NOT IN (
SELECT id FROM DA);
然后当我使用以下代码时
SELECT DS.name,A.id
FROM DS,
A,
DA
WHERE (DS.id=DA.id AND
A.id=DA.id) OR
DS.id NOT IN (
SELECT id FROM DA);
A部分返回4077个结果,B部分返回820,但最终代码在我终止之前给了我140000。 我知道我可以通过使用DISTINCT摆脱它们但我想知道这个的原因以及如何实际避免这种事情的发生。
答案 0 :(得分:0)
尝试使用join
和left outer join
:
SELECT DS.name,A.id
FROM DA join
A on A.id=DA.id
left outer join DA on DS.id=DA.id
这应该会给你正确的结果。
在您的查询中,您将获得所有记录的交叉产品。
答案 1 :(得分:0)
请尝试此查询
select TABA.DS_NAME,TABA.A_ID from (SELECT DS.name as Ds_Name,A.id as A_ID FROM DS, A, DA WHERE DS.id=DA.id AND A.id=DA.id)as TABA join (SELECT name,id FROM DS, WHERE DS.id NOT IN( SELECT id FROM DA))as TABB on TABA.A_ID = TABB.id问候。