2015-07-13 90 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