我试图连接两个表,但我一直得到奇怪的结果,所以我决定做一个
SELECT *
FROM transactions as t
LEFT JOIN customers as c on t.customer_id = c.id
只是为了查看所有列。当我查看输出时,事务表按预期加载,但客户表显示为完全空白的条目,尽管它实际上不是空白的。当我切换订单时("来自客户"和留下已加入的交易也是如此(,客户的表像正常情况一样出现,但现在交易表完全是空白的。老实说,我不知道是什么原因造成的,如果有任何建议,我将不胜感激!
我对问题的最佳猜测是,您稍微误解了联接的工作方式。这个推论是基于你的陈述:
当我查看输出时,事务表按预期加载,但客户表显示为完全空白的条目,尽管它实际上不是空白的。
JOIN
将两个表融合在一起。(当然,融合只是在输出中,而不是在数据库本身中!(因此,包含联接的SELECT
查询将始终返回一个联合表,而不是两个。
另一个因素是SELECT *
是一个糟糕的选择。如果这两个表有相同名称的列(我怀疑这里可能就是这种情况(,那么输出可能会变得非常混乱!像SELECT customers.*
这样的语法在这种情况下是你的朋友。
左外部联接是内部联接,加上左侧未出现在内部联接中的所有行,并在右侧添加NULL。
所以您的内部联接是空的,因为没有行符合联接条件,并且您在右侧得到了用NULL补充的左表。