将两个表的结果合并为一个记录集

时间:2010-12-20 20:58:45

标签: sql join

我有两个表项和内容。

 items:|ID|menu|img

 itemcontent |ID|parent|title|content

内容保留与包含标题和内容的父级的项目配对

我想搜索所有项目,并打印出itemcontent表中没有标题的记录 标题将打印为“空”。 所以打印输出看起来像:

title: test1 and ID: items.ID=1
title: Empty and ID: items.ID=2
title: Empty and ID: items.ID=3
title: test2 and ID: items.ID=4
title: Empty and ID: items.ID=5
etc...

我尝试了以下内容,然后尝试了一些但无济于事:

SELECT items.*, itemcontent.title, itemcontent.content
FROM items, itemcontent
WHERE itemcontent.title LIKE '%$search%'
     AND itemcontent.parent = items.ID 
order by title ASC          

非常感谢一点帮助

2 个答案:

答案 0 :(得分:1)

由于你想要项目中的所有行,无论它们是否在itemcontent中匹配,加上来自itemcontent的字段,如果匹配,你需要使用OUTER JOIN:

SELECT items.*, COALESCE(itemcontent.title, 'empty'), itemcontent.content
FROM items LEFT OUTER JOIN itemcontent ON itemcontent.parent = items.ID 
 WHERE (itemcontent.title LIKE '%$search%' OR itemcontent.title IS NULL)
 ORDER BY items.ID, itemcontent.title ASC    

SQL方言之间存在细微差别(例如,并非所有版本都有COALESCE),因此如果您想要更精确的答案,请说明您正在使用哪种产品。

答案 1 :(得分:0)

为了确保你可能想要ORDER BY itemcontent.title而不只是title或select itemcontent.title AS title?您是否在项目表中有一个名为title的字段?