mysql - 多个表的正确连接/左连接 +

标签 mysql

不知道如何操作,但我找到了一种有效的方法,尽管某些列中的数据不正确。因此,现在,我将留下“已解决”指示,但我可能需要此文档来获得其他帮助。不过也可以删除。

抱歉,但我认为答案不在于“具有相似标题的问题”。我很可能是错的,但我已经搜索了很多我能理解的文档,但这可能就像我过去使用 IBM 主机手册一样。如果您不知道确切的单词,您将找不到答案。

所以这里是:

SELECT * FROM membership LEFT JOIN address2 USING(memno)
CROSS JOIN contact USING(memno)
CROSS JOIN workers USING(memno)
CROSS JOIN comments USING(memno)
JOIN candidates USING(memno)

尝试了多种方法。我想说我尝试了一切可能的方法,但显然我至少没有以正确的方式做到这一点。当我只执行第一行时,我得到了所有正确的列,并且得到了数据库中表的所有五行。

当我添加第二行时,它可以工作,但我只得到两行。它通过“评论”行起作用。它不执行最后一行“候选”。

我需要获取的是所有五行(成员资格表中的行数)。

交叉连接是一个问题。我认为它限制了行,因为其中一个表中只有两行,并且它在限制上是双向的。

所以我认为我需要的是第二、第三和第四行的正确 JOIN 以及最后一行的另一个 JOIN 类型。

我能拔掉的头发非常有限,所以我需要你的帮助。

最佳答案

好吧,如果不知道您的表架构、数据,也没有明确的预期结果,就很难猜测您正在寻找什么。但这将从成员资格表中获取所有行,无论它们在其他表中是否匹配:

SELECT * FROM membership
LEFT JOIN address2 USING(memno)
LEFT JOIN contact USING(memno)
LEFT JOIN workers USING(memno)
LEFT JOIN comments USING(memno)
LEFT JOIN candidates USING(memno)

编辑:

就我个人而言,当使用这样的链式左连接时,我不会信任USING。我将通过显式添加要加入的表来确保:

SELECT * FROM membership m
LEFT JOIN address2 a on m.memno = a.memno
LEFT JOIN contact con on m.memno = con.memno
LEFT JOIN workers w on m.memno = w.memno
LEFT JOIN comments com on m.memno = com.memno
LEFT JOIN candidates can on m.memno = can.memno

扫描 documentationUSING 上,找不到任何对此的引用,但我的意思是我不确定它从哪个表中选择列。这:

SELECT * FROM membership m
LEFT JOIN address2 a on m.memno = a.memno
LEFT JOIN contact con on m.memno = con.memno

使用别名m作为左连接的左侧部分,所以我确信我会看到所有成员,无论他们是否有联系人或地址。然而,这个:

SELECT * FROM membership m
LEFT JOIN address2 a USING(memno)
LEFT JOIN contact c USING(memno)

不清楚在与contact连接时哪个表使用memno。在上一个示例的第一个左连接中,没有其他表可供选择,因此它将连接 ma,而 m 将是左连接部分。但是当加入c时,你将有2个memno:m.memnoa.memno。如果USING选择m,则查询将是相同的,但如果选择c,则先前的查询将转换为:

SELECT * FROM membership m
LEFT JOIN address2 a on m.memno = a.memno
LEFT JOIN contact c on a.memno = c.memno

我认为这不是您要找的。不要认为指定字段和它们来自的表是一种不好的做法......这样意图就更清晰了。

关于mysql - 多个表的正确连接/左连接 +,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753892/

相关文章:

mysql - 将多行值合并为单行值

mysql - 将值拆分为多行

javascript - 根据 Laravel 中的状态显示人员目录

PHP Mysqli 和使用 call_user_func_array

php - MySQL 结果打印多个

php - Yii 模型保存时外键错误

mysql - 从 MySQL 常见的 UserID 中获取超过 5 个表的数据

C# WPF 程序在调试中运行,但不调试就无法发布

PHP 常量(mysql 参数)和 include 不起作用

mysql - 选择五个最高的不同记录