2015-07-13 2 views
1

Мне нужно исправить запрос и не знаю, как это сделать. на самом деле запрос этоmysql query multi table with union и limit

(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`) 

Да, я знаю его давно, в принципе, мне нужно найти все строки из «qrliststgo», что соответствует 2 колонки с ней 2 столбцов «Hitos».

(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» снова.

Проблема, связанная с тем, что в «hitos» есть три строки, которые соответствуют одной строке из «qrliststgo», поэтому она «дублируется» ... 3 строки с той же информацией, кроме последней, изменился, потому что он нашел 3 результата в «hitos».

как я могу это сделать?

(мне нужно это для PHP для Excell экспорта)

Update:

Что мне нужно, показать все строки из qrlist, где есть хотя бы одна строка в Hitos, что qrlist.sigla = Hitos .idplace и qrlist.guia = hitos.guia.

Если есть результат, который соответствует совпадению, отобразите первый и пропустите остальные, а затем проверьте другой результат из qrlist.

не знаю, если я правильно объяснил

+0

Посмотрите в 'ЛЕВЫЙ JOIN' –

+0

да я сделал, у меня есть это' SELECT * FROM ' qrlistlocalstgo' LEFT JOIN 'hitos' ON' qrlistlocalstgo'. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', и результаты в 16-строчном порядке, 13 с нулевым данные по столбцам «hitos» и 3 строкам с теми же данными в части qrlist и разными данными в столбцах hitos cos i имеют 3 строки, которые соответствуют guia и sigla в qrlist guia и idplace на hitos. – 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, почти почти, мне пришлось удалить «fecha» из SELECT cos fecha из hitos, а не из «qrlist ...», мне просто нужно получить fecha от hitos в той же таблице. – Sebiche

+0

но, как я сказал, может быть более одной строки, которая соответствует сигла и guia с idplace и guia в hitos, мне просто нужно показать первую fecha из hitos (упорядочено по id) – Sebiche

+0

вот что я получаю с моим запросом [ http://i.imgur.com/z102w0T.png], и это с вашей [http://i.imgur.com/1Z7FtHW.png]. С твоим я получаю обе строки, которые имеют соответствующую информацию о hitos, но им не хватает «fecha» – Sebiche