如果第一个行中没有足够的行,如何从另一个表中选择行?随着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
这工作,但我有一个问题:这是否会统一两个表的每一个查询?即使在第一行中有足够的行吗?恐怕这会降低服务器的速度,如果是这样的话。 – 2012-04-03 10:54:51
它将统一两个表的匹配结果(而不是将选择标准应用于两个表中的UNIONed行,这会在找到匹配记录之前统一两个表中的所有行)。你可以在第二个WHERE子句中添加AND AND>(SELECT count(*)从WHERE name ='Michael'AND CHAR_LENGTH(description)> 10)'条件,尽管这会使查询访问'items'表两次;如果'moreitems'比'items'大**大得多,它才真正值得。 – 2012-04-03 11:08:12