2011-08-22 50 views
1

我一直有問題試圖從我的數據庫檢索數據到Microsoft Visual C#中的DataTable。我被告知這是因爲INNER JOINs使用不當。查詢(填充方法)如下。關於INNER JOIN的正確使用

SELECT Bordero.id AS id, Titulo.id AS id_titulo, Titulo.valor AS valor_titulo, 
     Sacado.nome AS nome_sacado, Cliente.nome AS nome_cliente, Sacado.documento, 
     Titulo.taxa_adm AS taxa_adm_titulo, Titulo.desagio AS desagio_titulo, 
     Titulo.liquido AS liquido_titulo, 
     (CASE Titulo.tipo 
      WHEN 'True' THEN 'Cheque' 
      ELSE 'Duplicata' 
     END) AS tipo, Titulo.dias, Titulo.codigo, Titulo.vencimento, 
     Titulo.data_base, Bordero.desagio AS desagio_bordero, 
     Bordero.taxa_adm AS taxa_adm_bordero, Bordero.liquido AS liquido_bordero, 
     Bordero.bruto, Bordero.duplicata, Bordero.desconto, Bordero.iss, Bordero.iof, 
     Bordero.cpmf, Bordero.pis, Bordero.cofins, Desconto.valor AS valor_desconto, 
     Desconto.descricao, Bordero.id_cliente 
FROM Bordero 
INNER JOIN Cliente ON Bordero.id_cliente = Cliente.id 
INNER JOIN Titulo ON Bordero.id = Titulo.bordero_id 
INNER JOIN Sacado ON Sacado.id = Titulo.sacado_id 
INNER JOIN Desconto ON Cliente.id = Desconto.id_cliente 

數據庫圖表看起來是這樣的: http://i53.tinypic.com/t0g4qp.jpg

什麼地方不對勁任何提示?

+3

你一直有什麼問題?你沒有得到你期望的數據,是否拋出異常,等等? – Tim

+0

有什麼問題?就內部連接而言,這個查詢沒有任何問題。不知道你期望看到什麼和/或錯誤是什麼,很難想象這個問題在心理上 – deutschZuid

+0

問題是給定的查詢沒有返回任何數據。 –

回答

4

沒有說明你的問題是你正在經歷我的猜測是你可能需要使用LEFT OUTER JOIN而不是所有的INNER JOIN

在查詢中使用INNER JOIN時,通過ON子句必須匹配的數據在兩個表中都不爲空。這意味着如果左表(FROM子句中的ID)存在,則右表中必須有匹配的記錄(您通過INNER JOIN加入的記錄)。如果右表沒有匹配記錄,則整個結果將從查詢中刪除。

通過改爲使用LEFT OUTER JOIN,您允許右表返回NULL,而不是每個不匹配的數據行。

TABLE A  TABLE B 
ID | Name ID | Address 
1 | Alice 1 | 123 ABC St. 
2 | Bob 3 | 789 XYZ St. 
3 | Cam 

使用上面的表,如果你是做一個FROM A INNER JOIN B ON A.ID = B.ID只行1和3將被返回。如果您要執行FROM A LEFT OUTER JOIN B ON A.ID = B.ID,則將返回來自A的所有行,並且B.Address對於#2將爲空。

+0

完美工作。謝謝! –