2012-05-29 58 views
3

我必须得到表格,我想要获得通过一个普通单元连接的所有结果。问题是第二个表只有第一个表的一些记录。加入两个表的所有内容

Table 1 forms 
form_id, description, image,dept 

Table 2 records 
record_id, form_id, comments, added_date, done_date 

如果做这样的查询:

SELECT * FROM form 
JOIN records ON record.form_id = form.form_id 

我没有得到所有的形式,因为对于这种形式的任何记录。有没有做这样的事情?我会为记录表中的每个表单创建一个空白记录,但我无法弄清楚。

回答

0

使用左加入对于这些情况

SELECT * FROM form 
LEFT JOIN records ON record.form_id = form.form_id 
2

这是LEFT OUTER JOIN的完美应用。
例子:

SELECT f.*, r.* 
FROM form f 
     LEFT JOIN records r 
     ON r.form_id = f.form_id 
ORDER BY f.description, r.added_date; 
+0

这将引发一个错误'列form_id是ambiguous'。您必须指定带有别名'SELECT f.form_id,f.description,f.image,f.dept,r.record_id,r.form_id作为record_form_id,r.comments,r.added_date,r.done_date FROM的列。 ..'甚至不询问r.form_id来减少通过线路传输的数据。无论如何,'LEFT JOIN'是正确的。 –

0

请检查u需要哪一个 - LEFT OUTER JOIN: 将包括在表左侧提及并匹配从记录的所有记录右侧表,未分割记录将为空

例如:

SELECT * 
FROM forms 
LEFT JOIN records ON forms.form_id = record.form_id 

FULL OUTER JOIN: 将包括两个表中的所有数据和无可比拟的将是无效

例:

SELECT * 
FROM forms 
FULL OUTER JOIN records ON forms.form_id = record.form_id