2014-01-22 73 views
0

我嘗試連接兩個表。一個是填充完全獨特變量debtor的表格。不存在債務人ID的重複。 現在我想加入items表,其中debtor.debtor ID可以多次出現。只有在其他表中的多行之間不存在某個值時纔會連接表

我希望做的是,如果該項目'20004'不會在訂單歷史記錄存在只能加入

我有以下SQL小提琴

http://sqlfiddle.com/#!2/a0826/1/0

create table items 
(
debtor int, 
item int, 
qty int, 
invoice int 
); 
create table debtor 
(
debtor int, 
name varchar(255) 
); 
insert into debtor(debtor, name) 
VALUES ('1000','Mister blue'), 
('1001','Mister Orange'), 
('1002','Mister Red'), 
('1003','Mister Yellow'), 
('1004','Mister Green'); 
INSERT INTO items (debtor, item,qty, invoice) 
values ('1000','20001','1','1'), 
('1000','20002','1','1'), 
('1000','20003','1','1'), 
('1000','20004','1','1'), 
('1000','20005','1','1'), 

('1001','20001','1','2'), 
('1001','20002','1','2'), 
('1001','20003','1','2'), 

('1001','20005','1','2'), 

('1002','20001','1','3'), 
('1002','20002','1','3'), 
('1002','20003','1','3'), 
('1002','20004','1','3'), 
('1002','20005','1','3'), 
('1002','20006','1','3'), 

('1003','20001','1','4'), 
('1003','20002','1','4'), 
('1003','20003','2','4'), 
('1003','20004','1','4'), 
('1003','20005','1','4'); 

而且我做的下面的查詢:

SELECT * FROM debtor 
JOIN items on debtor.debtor = items.debtor AND items.item != '20004' 

但我仍然得到所有不是'20004'的發票行。

如何執行查詢的方式,如果值'20004'不出現連接將不會執行?

我應該從查詢中得到的首選答案應該是隻有橙先生應該出現。

誰能幫幫我?如果你想只有那些發票

+0

你真正需要的結果是什麼列? –

回答

2

試試這個:

SELECT * FROM debtor d 
JOIN items i on d.debtor = i.debtor 
WHERE NOT EXISTS 
    (SELECT debtor 
    FROM items i2 
    WHERE item = '20004' AND i2.debtor = i.debtor 
    ) 

更新小提琴:http://sqlfiddle.com/#!2/a0826/12/0

+0

謝謝坦納的答案和更新的小提琴,這正是我需要的。快速和良好。 – Tschallacka

-1

'200004',你應該使用

SELECT * FROM debtor 
JOIN items on debtor.debtor = items.debtor AND items.item = '20004' 

您使用=,而不是...可能只是一個錯字...

+1

這不是他們想要的。返回藍色,紅色,黃色。他們想要橙色。 –

2

或者這樣:

select * from debtor d 
join items i on d.debtor = i.debtor 
where d.debtor not in (select debtor from items where item = '20004'); 
+0

謝謝基里爾的回答。我沒有選擇接受你的答案,因爲你的方法比Tanner給出的方法稍慢。但是,謝謝你的努力! – Tschallacka

-1

您應該將您的過濾器放在債務人列上,因爲1001 id是橙色先生。

SELECT * FROM debtor 
JOIN items on debtor.debtor = items.debtor AND debtor.debtor = '1001' 

http://sqlfiddle.com/#!2/a0826/19/0

+0

不能。它會變量哪些產品必須被排除,所以我會得到不同的結果。事先不知道我會得到哪個債務人。 在我提供的例子中,我明確表示預期的結果是橙色,在真正的單詞應用程序中,我會使用數十萬行來挖掘。 – Tschallacka

相關問題