0

我有一些包含几十个表的关系 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";
4

1 回答 1

3

你的问题现在很模糊,但很可能是因为你使用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用 s 替换辅助字段。NULLsecondary

更新:

您使用的隐式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
于 2009-11-10T16:39:12.157 回答