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