Mysql Select 空单元格未显示 [WHERE 部分]

Mysql Select Empty Cells not showing [WHERE part]

我作为自由职业者正在做一个支付控制软件,但我有一些关于 mysql 的问题。 我有一个用作日志的 table,称为“Bitacora”。在 table 我有一个名为 idCliente 的列,它是一个人的 id 在它自己的 table 中,因为我有另一个 table 名为“Cliente”,其中有一列名为“idCliente”,所以当我执行 select 时,我希望显示客户端的名称。

下面的示例显示了 table "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 查询

> 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 的那个doesn't appear in Cliente (-1) doesn't show, 所以以第一个 table 为例,查询仅 return

> Cliente Agregado |Mark
> Cliente Agregado |Zack

但是我想得到

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

而且我已经尝试过了,但仍然无法得到我想要的,我认为是因为WHERE部分。但仍然无法弄清楚,几天后,我认为需要一些帮助。

您使用了错误的结构。您应该使用 case… else。这并不意味着你不能继续你现在的样子,但你最好:

case
  when bitacora.tipoBitacora = 2 then 'Cliente Borrado'
  when bitacora.tipoBitacora = 3 then 'Cliente Editado'
  else 'nothing'
end as `my_column`
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 ;
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。按照上面的方法试试!希望对您有所帮助。

为了更好地理解,请访问此 link - SQL left join vs multiple tables on FROM line?