2009-11-10 92 views
0

我有一些关系型MySQL数据库,有数十个表...我的查询长度为1000英尺,并从几乎所有的表中选择数据...我也有我的'主'表,而所有其他表格都是指那一个。当我在主表中输入一行时,并在其他表中创建该行的所有关系时,我的查询正常工作。但是,如果我在主表中输入一行,而在其他地方我输入空集。但我想在我的结果中至少得到这些信息。或者,当然,所有在其他表格中输入的信息,无论某些表格没有该记录(行)的信息...在MySQL关系数据库中选择数据时的空集

感谢您的帮助!

更新:

我不使用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

我们可以看到查询?你的问题很抽象。 – 2009-11-10 16:33:15

+0

你现在的问题是无法回答的。请发布您的架构,查询和一些示例数据。 – Quassnoi 2009-11-10 16:34:21

回答

3

你的问题现在很模糊,但最有可能是由于事实上,您使用INNER JOIN s而不是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

更新:

JOIN语法使用(枚举表和WHERE子句中提供JOIN条件)假设INNER JOIN秒。

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

这可以按预期工作......我认为你和我的查询没有区别,但显然这就是我一直在寻找的!非常感谢你的帮助... – errata 2009-11-12 10:29:22