我有一些关系的MySQL数据库与几十个表...我的查询为1000英尺长,并从选择数据几乎所有的表......我也有我的“主”表,以及所有其他表指的是一。当我在我的主表中输入一行,当我创建的所有关系,为在其他表这一行我的查询工作正常。不过,如果我进入主表中的一行,并在其他地方,我得到空集。不过,我想获得至少在我的结果信息。或者,当然,这是在其他表中输入的所有信息,而不管事实,有些表没有该记录(行)的信息......

感谢您的帮助!

<强>更新

我不使用JOIN语法和我的查询看起来类似于这样:

$query = "SELECT a.*, b.*, c.*, d.*, e.*, f.*";
$query .= " FROM a, b, c, d, e, f";
$query .= " WHERE a.aID = b.aID";
$query .= " AND b.bID = c.bID";
$query .= " AND b.bID = d.bID";
$query .= " AND b.bID = e.bID";
$query .= " AND b.bID = f.bID";
有帮助吗?

解决方案

您的问题是现在很模糊,但最有可能是由于您使用的不是INNER JOINs LEFT JOINs的事实。

此查询:

SELECT  *
FROM    main
JOIN    secondary
ON      secondary.main_id = main.id

如果secondary为空将返回什么。

此查询:

SELECT  *
FROM    main
LEFT JOIN
        secondary
ON      secondary.main_id = main.id

将返回的至少一个记录在main每个记录,与NULLs更换二次场如果在secondary没有匹配的记录。

<强>更新

使用(枚举表和提供JOIN子句中的JOIN条件)隐WHERE语法假定INNER JOINs。

假设a被“主”表,重写查询作为这样的:

SELECT  a.*, b.*, c.*, d.*, e.*, f.*
FROM    a
LEFT JOIN
        b
ON      b.aID = a.aID
LEFT JOIN
        с
ON      c.bID = b.bID
LEFT JOIN
        d
ON      d.bID = b.bID
LEFT JOIN
        e
ON      e.bID = b.bID
LEFT JOIN
        f
ON      f.bID = b.bID
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top