Mysql选择没有显示[WHERE part]的空单元格

时间:2017-07-04 04:49:37

标签: mysql select where where-clause

我作为自由职业者做了一个支付控制的软件,但我有一些关于mysql的问题。 我有一个用作日志的表,称为" Bitacora "。在表格中我有一个名为idCliente的列,它是一个人在自己的表中的id,因为我有另一个名为&#34的表; Cliente "使用名为" idCliente "的列所以当我选择时,我希望显示客户的名字。

以下示例显示了表" 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中没有客户端,行仍然可以显示,但在我的结果中,那个没有出现在Cliente中的bitacora.idCliente( - 1)没有显示,因此使用所示的第一个表的示例,查询仅返回

> Cliente Agregado |Mark
> Cliente Agregado |Zack

但我想得到

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

我已经尝试过,但仍然无法得到我想要的东西,我认为是因为WHERE部分。但是仍然无法弄明白,经过几天后,我认为需要一些帮助。

3 个答案:

答案 0 :(得分:0)

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

case
  when bitacora.tipoBitacora = 2 then 'Cliente Borrado'
  when bitacora.tipoBitacora = 3 then 'Cliente Editado'
  else 'nothing'
end as `my_column`

答案 1 :(得分: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 ;

答案 2 :(得分: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?