基于单个查询中的不同联接从不同表中获取数据

时间:2013-11-20 15:12:03

标签: php mysql sql

查询在invstorelocation时返回完美结果。Description AS位置,与连接一起不包含在查询中

    INNER JOIN 
    `invstorelocation`
 ON (`invlabtes`.`StockLocCode` = `invstorelocation`.`Code`)

但是当我在查询中包含此连接时,即使完全满足所有条件,表也会返回空。 Plz提到了获取位置记录以及其他记录的替代方法。

 SELECT 
`invlabtes`.`CommAppCode` , 
`invlabtes`.`Code` , 
`invlabtes`.`GatePassNO` , 
`invlabtes`.`VehicleNo` , 
`invlabtes`.`SupplierCode` , 
`invstorelocation`.`Description` AS Location , 
`invstore`.`Description` AS MaterialName 
FROM 
    `invlabtes` 
INNER JOIN 
    `invstorelocation`
 ON (`invlabtes`.`StockLocCode` = `invstorelocation`.`Code`)        
INNER JOIN 
    `invgatepass` 
ON (`invlabtes`.`GatePassNO` = `invgatepass`.`InwardNo`) AND (`invlabtes`.`GatePassDate` = `invgatepass`.`EntryDate`) AND (`invlabtes`.`VehicleNo` = `invgatepass`.`VehicleNo`)

 INNER JOIN 
    `invgatepasssubtable` 
ON (`invlabtes`.`GatePassNO` = `invgatepasssubtable`.`InwardNo`) AND (`invlabtes`.`ItemCode` = `invgatepasssubtable`.`ItemCode`) 

INNER JOIN 
    `invstore` 
ON (`invgatepass`.`StoreCode` = `invstore`.`Code`) 

 WHERE (`invlabtes`.`Code` LIKE '%%' OR `invlabtes`.`CommAppCode` LIKE '%%' OR `invlabtes`.`GatePassNO` LIKE '%%' OR `invlabtes`.`VehicleNo` LIKE '%%' OR `invlabtes`.`SupplierCode` LIKE '%%') AND `invlabtes`.`CommAppCode`<>'' AND `invlabtes`.`Unit_Code`='1' LIMIT 100;

此查询成功返回数据。以上查询有问题。

  SELECT 
`invlabtes`.`CommAppCode` , 
`invlabtes`.`Code` , 
`invlabtes`.`GatePassNO` , 
`invlabtes`.`VehicleNo` , 
`invlabtes`.`SupplierCode` ,  
`invstore`.`Description` AS MaterialName 
FROM 
    `invlabtes` 

INNER JOIN 
    `invgatepass` 
ON (`invlabtes`.`GatePassNO` = `invgatepass`.`InwardNo`) AND (`invlabtes`.`GatePassDate` = `invgatepass`.`EntryDate`) AND (`invlabtes`.`VehicleNo` = `invgatepass`.`VehicleNo`)

 INNER JOIN 
    `invgatepasssubtable` 
ON (`invlabtes`.`GatePassNO` = `invgatepasssubtable`.`InwardNo`) AND (`invlabtes`.`ItemCode` = `invgatepasssubtable`.`ItemCode`) 

INNER JOIN 
    `invstore` 
ON (`invgatepass`.`StoreCode` = `invstore`.`Code`) 

 WHERE (`invlabtes`.`Code` LIKE '%%' OR `invlabtes`.`CommAppCode` LIKE '%%' OR `invlabtes`.`GatePassNO` LIKE '%%' OR `invlabtes`.`VehicleNo` LIKE '%%' OR `invlabtes`.`SupplierCode` LIKE '%%') AND `invlabtes`.`CommAppCode`<>'' AND `invlabtes`.`Unit_Code`='1' LIMIT 100;

2 个答案:

答案 0 :(得分:0)

根据您所说的面值,似乎没有invstorelocation行,invstorelocation.Code匹配您指定的限制的invlabtes.StockLocCode值。

尝试只选择invlabtes.StockLocCodeSELECT invlabtesFROM StockLocCode

然后尝试从Code中选择invstorelocationSELECt Code FROM invstorelocation

检查是否有任何值对应,如果它们已经被WHERE子句过滤掉了,那么chekc是什么?

不幸的是,如果没有数据,这将难以诊断。

答案 1 :(得分:0)

尝试

LEFT OUTER JOIN 
`invstorelocation`
ON (`invlabtes`.`StockLocCode` = `invstorelocation`.`Code`)

如果使用INNER JOIN并且表为空,则不会返回结果