如何从MAX(ID), MIN(ID)
MYSQL查询中获取更多列?
目前我只从这个查询中获得两个值:MAX(ID) & MIN(ID)
:
SELECT MIN(ID), MAX(ID)
FROM mytable
WHERE mytable.series = 'white'
;
需要得到类似这样的伪查询:
SELECT column1, column2
FROM mytable
WHERE series = 'white'
AND ID=Max(ID)
'AND GET ME ALSO'
WHERE series = 'white'
AND ID=Min(ID);`
它应该为“系列”列返回2行,等于“白色”。
第1列,第1列,第2列,ID =最小值(ID)。 第2列,第1列,第2列,ID =最大值(ID)。
但是怎么样?
答案 0 :(得分:6)
以下是使用UNION
的方法:
SELECT column1, column2
FROM mytable
WHERE series = 'white' AND ID IN
(
SELECT MIN(ID) FROM mytable WHERE series = 'white'
UNION
SELECT MAX(ID) FROM mytable WHERE series = 'white'
)
为了获得良好的效果,请在(series, id)
上添加综合索引。
或其他可能具有更好性能的变体:
(
SELECT column1, column2
FROM mytable
WHERE series = 'white'
ORDER BY ID
LIMIT 1
)
UNION
(
SELECT column1, column2
FROM mytable
WHERE series = 'white'
ORDER BY ID DESC
LIMIT 1
)
这也可以使用(series, id)
上的组合索引。
答案 1 :(得分:2)
更简单的解决方案:
SELECT a.column1, a.column2
FROM mytable a
JOIN (
SELECT MIN(ID) AS minid, MAX(ID) AS maxid
FROM mytable
WHERE series = 'white'
) b ON a.ID IN (b.minid, b.maxid)
答案 2 :(得分:0)
正如你所说的那样:
SELECT
column1, column2
FROM
mytable as m,
(SELECT MIN(ID) as mid, MAX(ID) as xid
FROM mytable WHERE mytable.series = 'white'
) t
WHERE
m.ID = t.mid or m.ID = t.xid;
括号中的select是内部选择,您可以像使用另一个表一样使用。