2016-08-13 50 views
2

與下面的SQL查詢可以得到導致成功的,當所有的表有數據我,但是這是我的查詢時transactions表沒有任何保存的數據和其空我查詢返回空的結果,但我想null或空列中的數據的MySql返回空結果當表JOIN的一個沒有任何數據

SELECT transactions.id, 
     userEwallets.ewalletNumber, 
     userEwallets.currencySymbol, 
     transactions.money, 
     transactions.transactionType, 
     b.username AS toUser, 
     a.username AS sender 
FROM transactions 
    JOIN userEwallets ON transactions.ewalletId = userEwallets.id 
    LEFT JOIN users AS b ON b.id = transactions.toUserId 
    LEFT JOIN users AS a ON a.id = transactions.fromUserId 
WHERE transactions.userId = 37 

當它不是空的,我得到這樣的結果:

id ewalletNumber  currencySymbol money transactionType toUser sender 
95 SHIRR9373036569  IRR 20   1  1     amin 

回答

0

爲了實現這個目標,你應該使用其他表成爲第一個。你這樣做的方式,如果transactions表中沒有記錄,那麼就沒有什麼可以加入的。
因此,請使用一張總是有記錄的表格,LEFT JOIN與其他表格一起使用。
試試這個:

SELECT transactions.id, 
    userEwallets.ewalletNumber, 
    userEwallets.currencySymbol, 
    transactions.money, 
    transactions.transactionType, 
    b.username AS toUser, 
    a.username AS sender 
FROM users AS b 
LEFT JOIN transactions ON b.id = transactions.toUserId 
LEFT JOIN users AS a ON a.id = transactions.fromUserId 
JOIN userEwallets ON transactions.ewalletId = userEwallets.id 
WHERE transactions.userId = 37 
0

您在這裏使用where條件。 where transactions.userId = 37。如果交易表中沒有數據,那麼where條件將失敗並因此返回任何數據

+0

它的必要條件爲我的查詢,我不能刪除,因爲我沒有在數據庫中的一個用戶 –

+0

@ tux-world如果在表中沒有數據,那麼這意味着沒有數據符合標準where子句中提到的,所以你沒有得到任何數據 –

+0

是的,它是正確的,但我想列數據爲空不空的結果 –

2

您可以在一行中使用虛擬表。其他表格應該保持加入。

SELECT transactions.id, 
     userEwallets.ewalletNumber, 
     userEwallets.currencySymbol, 
     transactions.money, 
     transactions.transactionType, 
     b.username AS toUser, 
     a.username AS sender 
FROM (select 1) dummy 
    LEFT JOIN transactions ON transactions.userId = 37 
    LEFT JOIN userEwallets ON transactions.ewalletId = userEwallets.id 
    LEFT JOIN users AS b ON b.id = transactions.toUserId 
    LEFT JOIN users AS a ON a.id = transactions.fromUserId 

如果你給它一個別名,你可以總是使用子查詢而不是表名。請注意,您必須將左連接表的WHERE條件移動到ON子句中 - 否則MySQL會將其轉換爲INNER JOIN。

+0

謝謝主席先生,問題解決了,什麼'(選1)dummy'? –

+0

它是一個具有一行和一列的虛擬派生表。嘗試'選擇*從(選擇1)虛擬' - 你會看到。 –

+0

非常感謝您,先生 –

相關問題