当连接表中的一个不是任何数据时,MySql返回空结果

当连接表中的一个不是任何数据时,MySql返回空结果,mysql,Mysql,使用下面的Sql查询,当所有表都有数据时,我可以获得成功的结果,但在此查询中,当事务表没有任何保存的数据且其为空时,我的查询返回空结果,但我希望获得null或空列数据 SELECT transactions.id, userEwallets.ewalletNumber, userEwallets.currencySymbol, transactions.money, transactions.transactionType,

使用下面的Sql查询,当所有表都有数据时,我可以获得成功的结果,但在此查询中,当事务表没有任何保存的数据且其为空时,我的查询返回空结果,但我希望获得null或空列数据

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

为了实现这一点,您应该使用另一个表作为第一个表。按照您的操作方式,如果事务表中没有记录,那么就没有可连接的记录。 所以,使用一个总是有记录的表,并将其和其他表连接起来。 试试这个:

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

你在这里使用where条件。其中transactions.userId=37。如果事务表中没有数据,则where条件将失败,因此不会返回任何数据

您可以使用具有一行的虚拟表。其他表应该与它保持连接

选择transactions.id, userEwallets.ewalletNumber, userEwallets.currencySymbol, 交易,金钱, transactions.transactionType, b、 用户名为toUser, a、 作为发件人的用户名 从中选择1个虚拟对象 在transactions.userId=37上左连接事务 LEFT JOIN userEwallets ON transactions.ewalletId=userEwallets.id 在b.id=transactions.toUserId上以b的身份左键加入用户 以a.id=transactions.fromUserId上的身份左键加入用户
如果您给它一个allias,您可以使用子查询而不是表名。请注意,您必须将左联接表的WHERE条件移动到ON子句中,否则MySQL将将将其转换为内部联接。

这是我查询的必要条件,我不能/t删除它,因为我的数据库中没有一个用户database@tux-如果表中没有数据,这意味着没有数据符合where子句中提到的标准,因此您无法获得任何数据是的,这是正确的,但我想获得数据为空的列而不是结果为空的列谢谢,问题解决了,选择什么1虚拟?这是一个具有一行和一列的虚拟派生表。请尝试从select 1虚拟中选择*,您将看到。哦,非常抱歉,先生,在这个查询中,userEwallets表中的userEwallets.ewalletNumber和userEwallets.currencySymbol都不是空的,但在这个查询中,它们的值为null,我不确定您的意思。尝试仅使用左连接查看更新。