2016-04-29 107 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