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?
我作为自由职业者正在做一个支付控制软件,但我有一些关于 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?