我在尝试将数据从数据库检索到Microsoft Visual C#中的DataTable时遇到了问题。我被告知这是因为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
任何有关错误的提示?
答案 0 :(得分:4)
如果您没有说明您的问题是什么,那么您可能需要使用LEFT OUTER JOIN
来表示某些表格,而不是所有INNER JOIN
。
在查询中使用INNER JOIN
时,通过ON
子句匹配的数据必须在两个表中都不为空。这意味着如果左侧表(FROM
子句中的ID)存在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
中的所有行,而#{1}}将为#2。