2017-07-04 62 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 ;