从三个表中检索数据

时间:2012-11-09 18:38:49

标签: mysql sql

我有三张表pedidos和pro_pedidos和徽标。 我想从pedidos获取数据,其中numero.pedidos = nuumero.prod_pedidos。从徽标我只想要列数据。这个查询没有任何错误,但只显示表格后面有数据吗?

SELECT a.id, a.numero, a.nome, a.codigo, a.fantasia, a.cnpj, a.endereco,
a.telefone, a.uf, a.cidade, a.cep, a.bairro, a.casa_numero, a.complemento,
a.celular, a.ped,a.ped_numero, a.emissao, a.entraga, a.vendedor, a.prazo,
a.transportador, a.total, a.obs, a.ativo,
b.codigo AS Codigo, b.prod, b.preco, b.qtd, b.und,
b.total AS Total,b.subtotal, b.numero AS Numero,
c.nome AS emp_nome, c.telefone AS emp_tel,
c.celular AS emp_cel, c.fax AS emp_fax,
c.endereco AS emp_end, c.web AS emp_web,
c.email AS emp_email
FROM pedidos a INNER JOIN
prod_pedidos b ON a.numero = b.numero, logos c
WHERE        (a.numero = @numero)

2 个答案:

答案 0 :(得分:3)

首先:http://dev.mysql.com/doc/refman/5.0/en/join.html

  

INNER JOIN和(逗号)在没有的情况下在语义上是等价的   连接条件:两者之间产生笛卡尔积   指定的表(即第一个表中的每一行都是   加入第二个表格中的每一行。)

     

但是,逗号运算符的优先级小于INNER   JOIN,CROSS JOIN,LEFT JOIN等等。如果你混合使用逗号连接   当有连接条件时,其他连接类型,错误   form可能会出现'on子句'中的未知列'col_name'。信息   关于这个问题的处理将在本节后面给出。

结论:在徽标表上使用内部联接而不是逗号,并添加加入条件,因为您目前正在制作笛卡尔积。


但是,由于您没有任何结果,这也意味着

没有有效的结果集
(a.numero = @numero)

结论:因为您说表中有数据:

  • 检查是否存在与a.numero
  • 对应的实际@numero
  • 检查您是否已将正确的参数传递给@numero
  • 检查您的参数@numero是否实现了a.numero
  • 的预期格式

希望它有所帮助,

S上。

答案 1 :(得分:0)

问题可能是连接类型 - INNER JOIN返回a和b表中的数据。如果数据仅在a中,或者在b中,那么它将不会被返回。使用LEFT或RIGHT join。

你还需要以某种方式链接到表c - logos

SELECT a.id, a.numero, a.nome, a.codigo, a.fantasia, a.cnpj, a.endereco,
a.telefone, a.uf, a.cidade, a.cep, a.bairro, a.casa_numero, a.complemento,
a.celular, a.ped,a.ped_numero, a.emissao, a.entraga, a.vendedor, a.prazo,
a.transportador, a.total, a.obs, a.ativo,
b.codigo AS Codigo, b.prod, b.preco, b.qtd, b.und,
b.total AS Total,b.subtotal, b.numero AS Numero,
c.nome AS emp_nome, c.telefone AS emp_tel,
c.celular AS emp_cel, c.fax AS emp_fax,
c.endereco AS emp_end, c.web AS emp_web,
c.email AS emp_email
FROM pedidos a LEFT JOIN
prod_pedidos b ON a.numero = b.numero
LEFT JOIN logos c ON a.nome=c.nome
WHERE        (a.numero = @numero)