2013-02-05 130 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