如果第一个行中没有足够的行,如何从另一个表中选择行?随着SQL

问题描述:

我有两个表:如果第一个行中没有足够的行,如何从另一个表中选择行?随着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?

尝试:

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