【发布时间】:2010-10-01 02:57:14
【问题描述】:
我有几张表,它们的字段相似但不完全相同。
他们拥有的相同字段是描述(文本字段)和修改(unixtime)
我想根据 unixtime 从这些表中选择最后修改的项目。我不能使用 UNION,因为表不一样并且多表选择超时。
我一直在寻找这个但没有运气,要么人们正在使用 JOINS 要么 SELECT A., B. FROM table A, table B
【问题讨论】:
我有几张表,它们的字段相似但不完全相同。
他们拥有的相同字段是描述(文本字段)和修改(unixtime)
我想根据 unixtime 从这些表中选择最后修改的项目。我不能使用 UNION,因为表不一样并且多表选择超时。
我一直在寻找这个但没有运气,要么人们正在使用 JOINS 要么 SELECT A., B. FROM table A, table B
【问题讨论】:
如果您的选择次数过多,请尝试在“已修改”上添加 desc 索引,并在选择上使用限制以仅返回一个(最后)行。
那么你可以:
SELECT
A,B,C,D, desc, modified
FROM
TABLEA
UNION ALL
SELECT
CAST(E as <A type>), CAST(F AS <B type>) ..., desc, modified
FROM
TABLE B
【讨论】:
试试这个:
SELECT
IF (A.modified > B.modified, A.modified, B.modified) AS modified,
IF (A.modified > B.modified, A.description, B.description) AS description,
FROM
(SELECT description, modified FROM A ORDER BY modified DESC LIMIT 1) AS A,
(SELECT description, modified FROM B ORDER BY modified DESC LIMIT 1) AS B
LIMIT 1
但是,这与只执行两个查询几乎相同(只是更复杂),所以我不推荐它。
【讨论】:
它们有什么不同? 也许你可以把常用字段拿出来:
select t1.name1 as name from table1
union
select t2.name2 as name from table2
【讨论】: