MySQL显示是否匹配

时间:2014-10-14 19:31:53

标签: mysql

我有2个表,一个是目录,其中包含所有产品的所有信息;第二个是库存,仅包含某些商店的某些产品。

目录称为pruebas,结构为:

cod varchar(10) PRI     
nom varchar(100)
tip varchar(50) 
des varchar(500)
pre double  
cla varchar(3)
fcm varchar(20)
cmb char(1)

如果cod是产品代码,则nom是描述,tip是模型,des是注释,pre是价格,cla是产品的关键类型,fcm是修改日期,以及cmb用于识别产品是否有一些副产品。

库存称为inventario,结构为:

loc varchar(20)
cod varchar(10)
can double
cve varchar(3)
mdl varchar(6)

如果loc是产品的商店,cod是与prueba匹配的代码,可以是产品的数量,cve是密钥类型,mdl是产品在商店中的位置。

我需要一个显示来自prueba按代码排序的所有内容的查询,但是,如果prueba和inventario之间存在匹配,则必须显示数量,如果不是,则必须显示0。更具体一点:

如果我在prueba中使用了代码2007,而在商店" XTORR"中使用了Inventario中的代码2007,则必须显示产品的数量。像:

Code    Product              Model      $  Key Quantity
2007    MICA ESPEJO SE C1904 XPERIA M   59  MI    5

但是,如果产品未出现在inventario中,则应显示0:

Code    Product                     Model      $   Key Quantity
2000    FUNDA MORRAL PERSONAJES 2             199   F   0

我有这个代码,但它在所有数量上都会抛出零。

select 
prueba.cod as 'Código', 
prueba.nom as 'Descripción', 
prueba.tip as 'Modelo', 
prueba.pre as 'Precio', 
prueba.cla as 'Clave' , 
if(prueba.cod = inventario.cod, inventario.can,0) as ' Cantidad'
from prueba,inventario
where inventario.loc = 'XTORR'
group by prueba.cod
order by CHAR_LENGTH(prueba.cod), prueba.cod;

请帮助,我找不到类似的帖子。

2 个答案:

答案 0 :(得分:1)

您正在使用内部联接(表名之间的逗号)而不是左联接从两个表中进行选择。然后你想使用ISNULL来检查空值。

SELECT prueba.cod as 'Código',
  prueba.nom as 'Descripción', 
  prueba.tip as 'Modelo', 
  prueba.pre as 'Precio', 
  prueba.cla as 'Clave',
  IFNULL(inventario.can, 0) as 'Cantidad'
FROM prueba
  LEFT OUTER JOIN inventario ON (prueba.cod = inventario.cod and inventario.loc = 'xtorr')
ORDER BY CHAR_LENGTH(prueba.cod), prueba.cod;

答案 1 :(得分:-1)

尝试以下查询

  select 
  prueba.cod as 'Código', 
  prueba.nom as 'Descripción', 
  prueba.tip as 'Modelo', 
  prueba.pre as 'Precio'
  prueba.cla as 'Clave',COUNT(if(inventario.cod IS NOT NULL)) as Quantity from prueba 
  left join inventario  on   prueba.cod = inventario.cod
  GROUP BY prueba.cod, prueba.nom,prueba.tip,prueba.pre,prueba.cla