关于INNER JOIN的正确使用
本文关键字:INNER JOIN 关于 | 更新日期: 2023-09-27 18:06:21
我一直有问题,试图从我的数据库检索数据到Microsoft Visual c#中的数据表。有人告诉我,这是因为INNER join使用不当。查询(Fill方法)是后面的查询。
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
有什么提示吗?
没有说明你的问题是什么,你正在经历我的猜测,你可能需要使用LEFT OUTER JOIN
的一些表,而不是所有的INNER JOIN
。
当在查询中使用INNER JOIN
时,您通过ON
子句匹配的数据必须在两个表中都不为空。这意味着如果ID存在于左表(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
将为null。