2016-04-29 74 views
0

比方说,我们有重量选择ID后记录

select id, 
     weight 
    from TABLE 
order by weight 

下令表;

id  weight 
--- ------- 
66  2.50 
12 12.00 
11 24.00 
19 25.00 
6 44.00 
7 45.00 
8 47.00 
9 48.00 
10 50.00 

我们只想返回大于或等于某个id的权重的记录。 例如,如果我们想ID = 7,然后我们会得到

id  weight 
--- ------- 
7 45.00 
8 47.00 
9 48.00 
10 50.00 

或者换句话说,从该行重量下令表的所有记录,其中id = 7 我们不希望的权重,我们想要ids。

+0

你的意思是重量比从45.00为ID 7有这个值对更大? –

+0

是的,我们希望“一个选择”sulution :) – holden321

+0

为什么你想它是单选?任何具体原因? –

回答

3

我想一个简单的内部查询会做:

SELECT `id` 
FROM `TABLE` 
WHERE `weight` >= (SELECT `weight` 
        FROM `TABLE` 
        WHERE `id` = 7 
        LIMIT 1) 
ORDER BY `id` 
+0

只有一个选择可以完成吗? – holden321

+0

不,afaik。只能通过加入同一张表。但这不合逻辑或不可取。 – Johan

+0

你忘了按重量顺序:)谢谢。 – holden321

2

如果你想重量较ID 7条更大,那么这将工作:

SELECT id, 
     weight 
    FROM TABLE 
    WHERE weight >= (SELECT weight 
         FROM TABLE 
        WHERE id = 7) 
ORDER BY weight 
2

如果你真的想做到这一点的一个JOIN而不是一个子查询:

SELECT t1.id, t1.weight 
FROM TABLE AS t1 
JOIN TABLE AS t2 ON t1.weight >= t2.weight 
WHERE t2.id = 7 
ORDER BY t1.weight 
1

它可以用一个选择来完成,但你将不得不使用用户定义的变量 这样

SELECT id, weight, 
     CASE WHEN id = 7 THEN @weight := weight 
      ELSE @weight 
     END AS compare_weight 
FROM `TABLE` 
HAVING weight >= compare_weight 
ORDER BY weight ASC 

http://sqlfiddle.com/#!9/4a846/9