2012-04-03 44 views
1

我有兩個表:如果第一個行中沒有足夠的行,如何從另一個表中選擇行?隨着SQL

表 「項目」:

| id | name  | description        | 
| 1 | Michael | This is a random description blabalbla | 
| 2 | Tom  | This is another descriptions blablabla | 

表 「moreitems」:

| id | name  | description        | 
| 1 | Michael | This is a random description blabalbla | 
| 2 | Mike  | This is another descriptions blablabla | 
| 3 | Michael | This is a random description blabalbla | 
| 4 | Blain  | This is another descriptions blablabla | 

目前,我取這樣從第一個表項:

SELECT * FROM items WHERE name = 'Michael' AND CHAR_LENGTH(description) > 10 LIMIT 3 

我想在查詢中包含第二個表,如果限制(3)尚未達到。我怎麼做 - 沒有PHP?

回答

3

嘗試:

SELECT * FROM 
(SELECT 'items' table_name, i.* 
FROM items i WHERE name = 'Michael' AND CHAR_LENGTH(description) > 10 
UNION ALL 
SELECT 'moreitems' table_name, m.* 
FROM moreitems m WHERE name = 'Michael' AND CHAR_LENGTH(description) > 10 
ORDER BY 1,2) v 
LIMIT 3 
+0

這工作,但我有一個問題:這是否會統一兩個表的每一個查詢?即使在第一行中有足夠的行嗎?恐怕這會降低服務器的速度,如果是這樣的話。 – 2012-04-03 10:54:51

+0

它將統一兩個表的匹配結果(而不是將選擇標準應用於兩個表中的UNIONed行,這會在找到匹配記錄之前統一兩個表中的所有行)。你可以在第二個WHERE子句中添加AND AND>(SELECT count(*)從WHERE name ='Michael'AND CHAR_LENGTH(description)> 10)'條件,儘管這會使查詢訪問'items'表兩次;如果'moreitems'比'items'大**大得多,它才真正值得。 – 2012-04-03 11:08:12

相關問題