我有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;
请帮助,我找不到类似的帖子。
答案 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