2017-07-04 70 views
0

我正在做一个自由职业者的支付控制软件,但我有几个关于mysql的问题。 我有一个表,作为日志,称为“比塔科拉”。在表中,我有一个名为idCliente的列,它是一个人在它自己的表中的id,因为我有另一个名为“Cliente”的表,名为“idCliente”的列,所以当我执行select I期望显示客户的名字。Mysql Select Empty Cells not shown [WHERE part]

下面的例子显示了表“Bitacora”如何处理3行。

idBitacora, tipoBitacora, **idCliente**, idPago, idPagoVario, fecha, razon 

'1', '1', **'6',** '-1', '-1', '2017-05-06 21:52:53', '' 

'2', '1', **'7',** '-1', '-1', '2017-05-06 21:53:01', '' 

'3', '1', **'-1',** '-1', '-1', '2017-05-06 22:19:33', '' 

所以我做了一个选择查询

> SELECT **IF(bitacora.tipoBitacora = 1, 'Cliente Agregado', 
> IF(bitacora.tipoBitacora = 2, 'Cliente Borrado', 
> IF(bitacora.tipoBitacora = 3, 'Cliente Editado', 
> IF(bitacora.tipoBitacora = 4, 'Pago Mensual', IF(bitacora.tipoBitacora 
> = 5, 'Pago Vario', IF(bitacora.tipoBitacora = 6, 'Intento Clave Fallida', 'Desconocido')))))) AS Suceso** , IF(bitacora.idCliente = 
> -1, '', cliente.idCliente) as idCliente FROM bitacora, cliente where cliente.idCliente=bitacora.idCliente ; 

大胆高于其有条件要知道什么样的记录是。

> SELECT IF(bitacora.tipoBitacora = 1, 'Cliente Agregado', 
> IF(bitacora.tipoBitacora = 2, 'Cliente Borrado', 
> IF(bitacora.tipoBitacora = 3, 'Cliente Editado', 
> IF(bitacora.tipoBitacora = 4, 'Pago Mensual', IF(bitacora.tipoBitacora 
> = 5, 'Pago Vario', IF(bitacora.tipoBitacora = 6, 'Intento Clave Fallida', 'Desconocido')))))) AS Suceso , **IF(bitacora.idCliente = 
> -1, '', cliente.idCliente) as idCliente** FROM bitacora, cliente where cliente.idCliente=bitacora.idCliente ; 

而且上面以粗体显示的条件我做,以确保如果在cliente.idCliente没有客户端的行仍然可以显示,但在我的结果,这并不出现在一个与bitacora.idCliente在Cliente(-1)犯规演出,所以与所示的第一表的示例中,查询只返回

> Cliente Agregado |Mark 
> Cliente Agregado |Zack 

但我想

> Cliente Agregado |Mark 
> 
> Cliente Agregado |Zack 
> 
> Cliente Agregado |(nothing) 

我都试过了,但还是可以不会得到wh在我想要的时候,我认为它是因为WHERE部分。但仍然无法解决,几天后,我认为需要一些帮助。

回答

0
SELECT IF(bitacora.tipoBitacora = 1, 'Cliente Agregado', IF(bitacora.tipoBitacora = 2, 'Cliente Borrado', IF(bitacora.tipoBitacora = 3, 'Cliente Editado', IF(bitacora.tipoBitacora = 4, 'Pago Mensual', IF(bitacora.tipoBitacora = 5, 'Pago Vario', IF(bitacora.tipoBitacora = 6, 'Intento Clave Fallida', 'Desconocido')))))) AS Suceso , IF(bitacora.idCliente = -1, '', cliente.idCliente) as idCliente 
FROM bitacora 
LEFT JOIN cliente ON cliente.idCliente=bitacora.idCliente; 

您应该使用像上面,因为如果我们加入与逗号分隔表格然后INNER JOIN将被应用。像上面一样尝试!希望这会帮助你。

如需了解更多信息,请访问此链接 - SQL left join vs multiple tables on FROM line?

+0

谢谢!它真的起作用了! – Sparkle

0

您正在使用错误的结构。您应该使用case… else。这并不意味着你不能继续为你,但你会更好:

case 
    when bitacora.tipoBitacora = 2 then 'Cliente Borrado' 
    when bitacora.tipoBitacora = 3 then 'Cliente Editado' 
    else 'nothing' 
end as `my_column` 
0
You can use this query 
SELECT 
(
CASE 
when bitacora.tipoBitacora = 1 THEN 'Cliente Agregado' 
when bitacora.tipoBitacora = 2 THEN 'Cliente Borrado' 
when bitacora.tipoBitacora = 3 THEN 'Cliente Editado' 
when bitacora.tipoBitacora = 4 THEN 'Pago Mensual' 
when bitacora.tipoBitacora = 5 THEN 'Pago Vario' 
when bitacora.tipoBitacora = 6 THEN 'Intento Clave Fallida' 
ELSE 'Desconocido' 
END 
)AS Suceso, 
(
CASE 
WHEN bitacora.idCliente = -1 THEN cliente.idCliente 
ELSE 'nothing' 
END 
) AS idCliente 
FROM bitacora, cliente where cliente.idCliente=bitacora.idCliente ;