2015-07-13 86 views
1

我需要修复查询,不知道如何。实际上查询是这个mysql查询与联盟和限制多表

(SELECT qrliststgo.ordenser,qrliststgo.razon,qrliststgo.emision,qrliststgo.despacho,hitos.fecha FROM `qrliststgo`,`hitos` WHERE `qrliststgo`.`tipotransporte`='I' AND `hitos`.`idplace`=`qrliststgo`.`sigla` AND `hitos`.`guia`=`qrliststgo`.`guia`) UNION (SELECT qrlistvalpo.ordenser,qrlistvalpo.razon,qrlistvalpo.emision,qrlistvalpo.despacho,hitos.fecha FROM `qrlistvalpo`,`hitos` WHERE `tipotransporte`='I' AND `hitos`.`idplace`=`qrlistvalpo`.`sigla` AND `hitos`.`guia`=`qrlistvalpo`.`guia`) UNION (SELECT qrlistsananto.ordenser,qrlistsananto.razon,qrlistsananto.emision,qrlistsananto.despacho,hitos.fecha FROM `qrlistsananto`,`hitos` WHERE `qrlistsananto`.`tipotransporte`='I' AND `hitos`.`idplace`=`qrlistsananto`.`sigla` AND `hitos`.`guia`=`qrlistsananto`.`guia`) UNION (SELECT qrlistlocalstgo.ordenser,qrlistlocalstgo.razon,qrlistlocalstgo.emision,qrlistlocalstgo.despacho,hitos.fecha FROM `qrlistlocalstgo`,`hitos` WHERE `qrlistlocalstgo`.`tipotransporte`='I' AND `hitos`.`idplace`=`qrlistlocalstgo`.`sigla` AND `hitos`.`guia`=`qrlistlocalstgo`.`guia`) UNION (SELECT qrlistlocalvalpo.ordenser,qrlistlocalvalpo.razon,qrlistlocalvalpo.emision,qrlistlocalvalpo.despacho,hitos.fecha FROM `qrlistlocalvalpo`,`hitos` WHERE `qrlistlocalvalpo`.`tipotransporte`='I' AND `hitos`.`idplace`=`qrlistlocalvalpo`.`sigla` AND `hitos`.`guia`=`qrlistlocalvalpo`.`guia`) UNION (SELECT qrlistlocalsananto.ordenser,qrlistlocalsananto.razon,qrlistlocalsananto.emision,qrlistlocalsananto.despacho,hitos.fecha FROM `qrlistlocalsananto`,`hitos` WHERE `qrlistlocalsananto`.`tipotransporte`='I' AND `hitos`.`idplace`=`qrlistlocalsananto`.`sigla` AND `hitos`.`guia`=`qrlistlocalsananto`.`guia`) 

是的,我知道它很长,基本上,我需要找到匹配的是2列有“hitos”的2列“qrliststgo”的所有行。

(SELECT qrliststgo.ordenser,qrliststgo.razon,qrliststgo.emision,qrliststgo.despacho,hitos.fecha FROM `qrliststgo`,`hitos` WHERE `qrliststgo`.`tipotransporte`='I' AND `hitos`.`idplace`=`qrliststgo`.`sigla` AND `hitos`.`guia`=`qrliststgo`.`guia`) 

,然后使用UNION再次做同样的名为“qrlistvalpo”另一个表和“hitos”。

遇到的问题IM的是,在“hitos”,有3行匹配,从“qrliststgo”一行,所以它被“复制” ...... 3线,或与同一信息除了最后一个因为它在“hitos”中找到3个结果而被更改。

我该怎么办?

(我需要这一个PHP以EXCELL出口)

更新:

我需要的是显示所有来自qrlist行那里是在hitos至少一行是qrlist.sigla = hitos .idplace和qrlist.guia = hitos.guia。

如果hitos中匹配的结果多于一个,则显示第一个结果并跳过其他结果,然后从qrlist中检查另一个结果。

不知道如果我正确

+0

查找到'LEFT JOIN' –

+0

是我没有,我有这个'SELECT * FROM' qrlistlocalstgo' LEFT JOIN'hitos' ON'qrlistlocalstgo'.'sigla'​​ ='hitos'.'idplace' AND'qrlistlocalstgo'.'guia' ='hitos'.'guia'' and that results in 16 rows,13 with null 'hitos'列上的数据以及qrlist部分中具有相同数据的3行以及hitos列上的不同数据cos我有3行匹配guia和idia上的guia和sigla。 – Sebiche

回答

0

解释查看是否存在以下给你以后:

 (SELECT ordenser, razon, emision, despacho, fecha FROM qrliststgo 
     WHERE (sigla, guia) IN (SELECT DISTINCT idplace, guia FROM hitos)) 
UNION (SELECT ordenser, razon, emision, despacho, fecha FROM qrlistvalpo 
     WHERE (sigla, guia) IN (SELECT DISTINCT idplace, guia FROM hitos)) 
UNION (SELECT ordenser, razon, emision, despacho, fecha FROM qrlistsananto 
     WHERE (sigla, guia) IN (SELECT DISTINCT idplace, guia FROM hitos)) 
UNION (SELECT ordenser, razon, emision, despacho, fecha FROM qrlistlocalstgo 
     WHERE (sigla, guia) IN (SELECT DISTINCT idplace, guia FROM hitos)) 
UNION (SELECT ordenser, razon, emision, despacho, fecha FROM qrlistlocalvalpo 
     WHERE (sigla, guia) IN (SELECT DISTINCT idplace, guia FROM hitos)) 
UNION (SELECT ordenser, razon, emision, despacho, fecha FROM qrlistlocalsananto 
     WHERE (sigla, guia) IN (SELECT DISTINCT idplace, guia FROM hitos)); 
+0

WOW,几乎差不多,我不得不从SELECT OS中删除“fecha”,而是从hitos而不是从“qrlist ...”中删除,我只需要从同一个表中的hitos中获得fecha。 – Sebiche

+0

但据我所知,可以有不止一行匹配sigla和guia idis和guia在hitos中,我只需要显示来自hitos的第一个fecha(按ID排序) – Sebiche

+0

这是我得到我的查询[ http://i.imgur.com/z102w0T.png]这是你的[http://i.imgur.com/1Z7FtHW.png]。 与你的我得到的行有匹配的信息hitos,但我错过了“费尔” – Sebiche