2015-04-30 53 views
0

我試圖將DS中的名稱與A中的ID匹配,並且它們只能通過基本上是客戶ID和項目ID的DA連接。我還需要顯示沒有購買記錄的項目。SQL使用OR時重複結果OR

我已分別用兩種條件下嘗試, 部分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 d it。 我知道我可以通過使用DISTINCT擺脫他們,但我想知道這個原因以及如何避免發生這種事情。

回答

0

嘗試使用joinleft 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 

這應該給你正確的結果。

在您的查詢中,您獲得了所有記錄的交叉產品。

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 
問候。