我有以下三个表格
表eaa
--------------
| id | title |
--------------
| 1 | ABC |
--------------
| 2 | MNO |
--------------
| 3 | XYZ |
表eap
-----------------------
| id | eaa_id | title |
-----------------------
| 1 | 1 | CDE |
-----------------------
| 2 | 1 | BLA |
-----------------------
| 3 | 2 | FOO |
----------------------
| 4 | 3 | BAR |
-----------------------
| 5 | 3 | FOB |
-----------------------
第三张表etp
-----------------------------------
| id | eap_id | trip_id | dest_id |
-----------------------------------
| 1 | 1 | 143 | 104 |
-----------------------------------
| 2 | 2 | 143 | 226 |
-----------------------------------
| 3 | 3 | 143 | 226 |
-----------------------------------
| 4 | 4 | 143 | 226 |
-----------------------------------
| 5 | 5 | 143 | 228 |
-----------------------------------
| 6 | 6 | 128 | 123 |
-----------------------------------
| 7 | 7 | 442 | 154 |
我的问题
我希望将eap
表中的所有数据和eaa
表的所有数据与eaa_id
表格中的eap
相对trip_id
列etp
表,并希望按结果集排序,以便对查询中给出的dest_id
etp
表进行排序,与给定dest_id
匹配的行首先出现在其他行中来晚了。
例如,如果我提供trip_id
为143而dest_id
为226,则结果应该以{{1}} 2,3,4的行首先出现,然后是1和5
到目前为止我做了什么
eap_id
这个查询给了我所有行的eap.id,其中trip_id是143.现在我无法理解如何将dest_id传递给查询中的226,如上所述
答案 0 :(得分:1)
只需在CASE
子句中添加ORDER BY
表达式即可。像这样:
...
WHERE etp.trip_id = 143 or etp.dest_id = 226
ORDER BY
CASE WHEN etp.trip_id = 143 AND etp.dest_id = 226 THEN 0 ELSE 1 END, ID;
请在此处查看:
这会将行2,3,4放在第一行,然后是1,5:
| ID | EAA_ID | TITLE |
|----|--------|-------|
| 2 | 1 | BLA |
| 3 | 2 | FOO |
| 4 | 3 | BAR |
| 1 | 1 | CDE |
| 5 | 3 | FOB |
答案 1 :(得分:0)
据我了解,您希望ORDER BY ABS(226-dest_id)
。