2015-10-23 51 views
0

我有2個表:Lancamento和Pagamento。這兩個表格有N到N的關係,因爲我有第三個表格:lancamentoHasPagamento。N到N的關係,搜索行不相關

我想要查找表lancamento中與table pagamento行無關的所有行。

我這樣做:

SELECT * FROM lancamento l 
LEFT OUTER JOIN lancamento_has_pagamento hp ON l.codigo != hp.codigo_lancamento 
WHERE bol_quitado = 0 
AND YEAR(l.data_vencimento) = 2015 
AND MONTH(l.data_vencimento) = 10 
AND l.valor BETWEEN 475.00 AND 525.00; 

但是這個代碼重複查找表中的lancamento_has_pagamento的每一行,做你們有這方面的任何解決方案?

例子:

lancamento_has_pagamento

enter image description here
比方說,我有行有數據= 2015年10月15日和勇氣= 500.00 ADN線鱈Lacamento表128. I」 m期望代碼只返回一行128行。

+0

你能否說明你的情況,一些原始數據源和預期結果請設置? – Alex

+0

我剛剛加了你問的。 Wainting你的迴應:) –

回答

1

你的加入條件應該是 「=」 沒有,那麼你應該測試你的其他表的外鍵是NULL:

SELECT * FROM lancamento l 
LEFT OUTER JOIN lancamento_has_pagamento hp ON l.codigo = hp.codigo_lancamento 
WHERE hp.codigo_lancamento IS NULL 
//... your other conditions come here. 
; 
+0

完美工作。謝謝! –

0

如果我正確地得到你所需要的東西,如:

SELECT * FROM lancamento l 
LEFT JOIN lancamento_has_pagamento hp 
ON l.codigo = hp.codigo_lancamento 
WHERE bol_quitado = 0 
AND YEAR(l.data_vencimento) = 2015 
AND MONTH(l.data_vencimento) = 10 
AND l.valor BETWEEN 475.00 AND 525.00 
GROUP BY l.codigo # <-- this codigo column is your key column 
HAVING COUNT(hp.codigo_lancamento)=0; 

或更簡單: 「!=」

SELECT * FROM lancamento l 
LEFT JOIN lancamento_has_pagamento hp 
ON l.codigo = hp.codigo_lancamento 
WHERE hp.codigo_lancamento IS NULL 
AND bol_quitado = 0 
AND YEAR(l.data_vencimento) = 2015 
AND MONTH(l.data_vencimento) = 10 
AND l.valor BETWEEN 475.00 AND 525.00 
+0

感謝您的時間! –