2013-02-05 204 views
2

我有SQL的一个问题,我给我解释一下:关于SQL查询

我有2个表

announcements_job

announcements_education

下面你可以看到预览表

announcements_education announcements_education

announcements_job announcements_job

我想我的数据库结构不是很好......但它的后期! (忘记我的数据类型,实际上是废话),我是一个坏人吗?

因此:如何取得最后5条记录ORDER BY insert_db_date(在这两个表之间)?

- >如果这是不可能的,你有另一种解决方案吗?

在此先感谢;)

+0

这两张桌子之间的含义是什么?他们有某种联系吗? –

+0

你正在使用什么[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)? 'SQL Server'? 'MySQL'? 'Oracle'? 'DB2'?等等。 –

+0

'(忘记数据类型,它是废话)'Oo'如何获取最后5条记录ORDER BY insert_db_date(在这两个表之间)?'创建另一个表来保持这两个表之间的关系(假设有多个到多个关系),然后加入这三个表,选择前5个记录,这些记录将按'[announcements_education]。[insert_db_date]'和'[announcements_job]。[insert_db_date]'进行排序。 – Leri

回答

1

您需要在选择前向列中应用订单。也就是说,假设您尚未添加最新的条目。但最好是安全而不是遗憾!

SELECT * FROM announcements_education ORDER BY DESC insert_db_date LIMIT 5; 

分别为:

SELECT * FROM announcements_job ORDER BY DESC insert_db_date LIMIT 5; 

你必须指定要由降序排列为默认ORDER BY将升序排序顺序。 LIMIT声明将确保您只返回前五项。由于您的表格是从最新的入口数据到最新的,所以只显示最近的五个表格。

UPDATE:

我有点误解你的问题。如果你想在两个表中获得前5名,下面的代码就是你想要的。

(SELECT * FROM announcements_education ORDER BY DESC insert_db_date) 
UNION ALL 
(SELECT * FROM announcements_job ORDER BY DESC insert_db_date) 
LIMIT 5 

让我知道它的工作原理!

+0

我粘贴你最后的SQL查询,我得到一个错误语法:SQL error(1064)'DESC insert_db_date'附近的语法错误UNION ALL(SELECT * FROM announcements_job ORDER BY DESC'在第1行 –

+0

我在这两个表之间测试了一个简单的UNION ALL,我有另一个错误 - >你不能UNION所有两个没有相同列数的表... –

+0

啊是的,我明白了,我的道歉,你可以做的就是细化SELECT语句,只需从两个表中取出你需要的行;如果你能忍受丢失两行信息,那么这是最好的选择。如果没有数据丢失的唯一解决方案是只检索前五名的ID(通过再次修改SELECT语句以仅返回ID),然后启动第二个查询来检索它们。当然,你需要一些逻辑来检查它们在哪个表中。或者每个表格获得前5列并手动计算前5个列。 – Eric