在MySQL关系数据库中选择数据时清空

时间:2009-11-10 16:31:11

标签: database mysql relational-database

我有一些关系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";

1 个答案:

答案 0 :(得分:3)

您的问题现在非常模糊,但很可能是因为您使用的是INNER JOIN而不是LEFT JOIN s。

此查询:

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中的每条记录返回至少一条记录,如果NULL中没有匹配的记录,则将辅助字段替换为secondary。< / p>

<强>更新

您使用的隐式JOIN语法(枚举表并在JOIN子句中提供WHERE条件)假定为INNER JOIN s。

假设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