使用INNER JOIN有限制吗?
原始查询(工作得很好)我受到77行影响
SELECT atendimento.id, atendimento.responsavel, atendimento.ocorrencia,
atendimento.idcontrato, cliente.nome as clinome, cliente.id as cliid,
atendimento.d_ini, usuario.apelido, tipos.descricao, tipos.id as tip
FROM atendimento
INNER JOIN cliente ON atendimento.cliente=cliente.id
INNER JOIN usuario ON atendimento.usuario=usuario.id
INNER JOIN tipos ON atendimento.status=tipos.id
WHERE 1=1 AND (atendimento.status=10 OR atendimento.status=11)
ORDER BY tipos.id, atendimento.d_ini ASC
新尝试:(效果不佳)仅限于受影响的17行。除了我的查询中返回的只有17行之外,此处的结果是相同的。
SELECT atendimento.id, atendimento.responsavel, atendimento.ocorrencia,
atendimento.idcontrato, atend_os.protocolo, atend_os.tecnico,
cliente.nome as clinome, cliente.id as cliid, atendimento.d_ini,
usuario.apelido, tipos.descricao, tipos.id as tip
FROM atendimento
INNER JOIN atend_os ON atendimento.id=atend_os.protocolo
INNER JOIN cliente ON atendimento.cliente=cliente.id
INNER JOIN usuario ON atendimento.usuario=usuario.id
INNER JOIN tipos ON atendimento.status=tipos.id
WHERE 1=1 AND (atendimento.status=10 OR atendimento.status=11)
ORDER BY tipos.id, atendimento.d_ini ASC
这里出了什么问题?有人知道结果改变的原因吗?
非常感谢任何信息!
答案 0 :(得分:6)
两个查询之间的区别在于新查询也在访问atend_os
表。因此,任何不属于atendimento.cliente
的{{1}}值都会被过滤掉。
cliente.id
要求两个表中都存在该值,否则该行将被丢弃。
答案 1 :(得分:3)
显然这个表atend_os不包含每个atendimento的记录。也许你需要一个左连接?
答案 2 :(得分:3)
试
SELECT atendimento.id, atendimento.responsavel, atendimento.ocorrencia,
atendimento.idcontrato, atend_os.protocolo, atend_os.tecnico,
cliente.nome as clinome, cliente.id as cliid, atendimento.d_ini,
usuario.apelido, tipos.descricao, tipos.id as tip
FROM atendimento
INNER JOIN cliente ON atendimento.cliente=cliente.id
INNER JOIN usuario ON atendimento.usuario=usuario.id
INNER JOIN tipos ON atendimento.status=tipos.id
LEFT JOIN atend_os ON atendimento.id=atend_os.protocolo
WHERE 1=1 AND (atendimento.status=10 OR atendimento.status=11)
ORDER BY tipos.id, atendimento.d_ini ASC
并查看有多少行有atend_os.protocolo = NULL