我必须进行“相同”的查询,除了在一个查询中我只从表中检索一列,而在另一个查询中,我从同一个表中检索多个列。否则一切都是一样的。出于某种原因,两个查询的结果中的顺序并不完全相同。怎么会这样?
这是两个问题:
SELECT b.bruker_id, b.poeng_j + b.poeng_ss + b.poeng_u + b.poeng_n + b.poeng_s + b.poeng_f + b.poeng_v AS orderColumn
FROM brukere b
JOIN soknad s ON b.bruker_id = s.bruker_id
WHERE s.t_start_y =2013
AND s.t_start_s =0
AND YEAR( NOW( ) ) - b.aar >30
AND YEAR( NOW( ) ) - b.aar <40
ORDER BY orderColumn DESC
LIMIT 10 ;
SELECT b.bruker_id, b.poeng_j + b.poeng_ss + b.poeng_u + b.poeng_n + b.poeng_s + b.poeng_f + b.poeng_v AS orderColumn, b.etternavn, b.fornavn, YEAR( NOW( ) ) - b.aar AS alder, b.poeng_j, b.poeng_ss, b.poeng_u, b.poeng_n, b.poeng_s, b.poeng_f, b.poeng_v, b.kjonn
FROM brukere b
JOIN soknad s ON b.bruker_id = s.bruker_id
WHERE s.t_start_y =2013
AND s.t_start_s =0
AND YEAR( NOW( ) ) - b.aar >30
AND YEAR( NOW( ) ) - b.aar <40
ORDER BY orderColumn DESC
LIMIT 10 ;
第一个查询返回:
+-----------+-------------+
| bruker_id | orderColumn |
+-----------+-------------+
| 92 | 29 |
| 271 | 28 |
| 645 | 28 |
| 323 | 27 |
| 487 | 27 |
| 58 | 27 |
| 76 | 27 |
| 289 | 26 |
| 759 | 26 |
| 128 | 26 |
+-----------+-------------+
第二个查询返回:
+-----------+-------------+-----------+----------+-------+------------+------------------+------------------+-------------+-----------+-----------------+------------+-------+
| bruker_id | orderColumn | etternavn | fornavn | alder | poeng_j | poeng_ss | poeng_u | poeng_n | poeng_s | poeng_f | poeng_v | kjonn |
+-----------+-------------+-----------+----------+-------+------------+------------------+------------------+-------------+-----------+-----------------+------------+-------+
| 92 | 29 | Tonheim | Kine | 33 | 4 | 16 | 3 | 0 | 0 | 6 | 0 | 1 |
| 645 | 28 | Saue | Laila | 36 | 8 | 16 | 0 | 0 | 0 | 4 | 0 | 1 |
| 271 | 28 | Grønnevik | Karl | 38 | 8 | 16 | 0 | 0 | 0 | 4 | 0 | 0 |
| 76 | 27 | Tornes | Kristina | 39 | 5 | 16 | 0 | 0 | 0 | 6 | 0 | 1 |
| 487 | 27 | Smestad | Tonje | 34 | 8 | 16 | 0 | 0 | 0 | 0 | 3 | 1 |
| 58 | 27 | Torjussen | Linn | 35 | 8 | 16 | 0 | 0 | 0 | 0 | 3 | 1 |
| 323 | 27 | Gillebo | Tore | 31 | 5 | 16 | 0 | 0 | 0 | 6 | 0 | 0 |
| 759 | 26 | Sætren | Grete | 36 | 4 | 16 | 0 | 0 | 0 | 6 | 0 | 1 |
| 289 | 26 | Gjersøe | Torbjørn | 37 | 4 | 16 | 0 | 0 | 0 | 6 | 0 | 0 |
| 339 | 26 | Gjøen | Fredrik | 34 | 4 | 16 | 0 | 0 | 0 | 6 | 0 | 0 |
+-----------+-------------+-----------+----------+-------+------------+------------------+------------------+-------------+-----------+-----------------+------------+-------+
如您所见,订单不一样......
答案 0 :(得分:2)
如果您为每个SELECT首先添加一列
b.poeng_j + b.poeng_ss + b.poeng_u + b.poeng_n + b.poeng_s + b.poeng_f + b.poeng_v AS orderColumn
然后将查询更改为ORDER BY orderColumn
然后,您将能够清楚地看到它所订购的。然后,您可能会看到某些行在orderColumn中具有相同的值,因此如果没有第二个ORDER BY条件,则排序可能不一致,即ORDER BY orderColumn, bruker_id
使用您的第二个查询我最终会
SELECT
b.bruker_id,
b.etternavn,
b.fornavn,
YEAR( NOW( ) ) - b.aar AS alder,
b.poeng_j, b.poeng_ss,
b.poeng_u,
b.poeng_n, b.poeng_s,
b.poeng_f,
b.poeng_v,
b.kjonn,
(b.poeng_j + b.poeng_ss + b.poeng_u + b.poeng_n + b.poeng_s + b.poeng_f + b.poeng_v) AS orderColumn
FROM brukere b
JOIN soknad s ON b.bruker_id = s.bruker_id
WHERE s.t_start_y =2013
AND s.t_start_s =0
AND YEAR( NOW( ) ) - b.aar >30
AND YEAR( NOW( ) ) - b.aar <40
ORDER BY orderColumn DESC, b.bruker_id ASC
LIMIT 10 ;
在您的示例数据中,bruker_id 645和271的orderColumn值均为28。