假设我有一个表Guest
,它有g_id
列:值1到10.
现在我希望查询返回g_id既不是升序也不是降序。 但我希望按照这个特定的顺序排在第4位,然后是第3位,然后是第5位。 我也想要第4和第3个条目。
说我的参赛作品有一个id和一个名字。 ,即。我的表Guest有这两个表。 现在我的表格如下。
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
现在我想要的是第4个第3个和第5个g_id
的条目,并按此特定顺序。
我如何编写SQL查询? 感谢。
从来宾中选择* _ __ _ __ _ ____ ???
请填补空白。
答案 0 :(得分:2)
判断某事是第4,第3还是第5的顺序是什么?如果没有ORDER BY
子句,SQL将以不确定的顺序返回数据。您不能依赖于在数据库表本身中输入或存储行的顺序。
您可以像这样硬编码您所要求的内容:
select *
from Guest
order by case
when g_id = 4 then 1
when g_id = 3 then 2
when g_id = 5 then 3
else 4
end
答案 1 :(得分:2)
您可以在CASE
中使用ORDER BY
语句使用假列进行排序,并使用WHERE IN
子句仅返回所需的值。
SELECT *
FROM Guest
WHERE g_id IN (3, 4, 5)
ORDER BY
CASE WHEN g_id = 4 THEN 1
WHEN g_id = 3 THEN 2
WHEN g_id = 5 THEN 3
END
答案 2 :(得分:0)
一个解决方案是case
声明:
select g_id from (
select g_id, case g_id
when 4 then 1
when 3 then 2
when 5 then 3
else 0
end virtcol
where virtcol != 0
order by virtcol
);
答案 3 :(得分:0)
我不确定您的订购设置如何,但您可以按具体要求订购:
ORDER BY
g_id = 4 DESC,
g_id = 3 DESC,
g_id = 5 DESC
你可能最好选择条目,并在你的php代码中做这样的事情:
$order = array('4 ', '3 ', '5 ');
$data = array();
while ($row = $result->fetch()) {
$data["$row->g_id "] = $row;
}
$data = array_merge(array_flip($order), $data);
答案 4 :(得分:0)
我认为答案主要取决于您正在进行的DBMS。
在Oracle中,下面的查询,即使效率低下,也应该起作用
select * from
(select * , rownum as order from guest order by id asc ) b
where b.order = 4
UNION
select * from
(select * , rownum as order from guest order by id asc ) b
where b.order = 3
UNION
select * from
(select * , rownum as order from guest order by id asc ) b
where b.order = 5
不确定使用简单查询是否可以提高效率, 我只会使用上面的怪物而且只有你要查询的桌子非常小。
如果表格很大,您还有另一个选项,您只需要提取第一行。在你描述的情况下,我将检索前5行,然后以编程方式提取位置4,3,5中的行。
您可以在oracle中使用此查询提取前5行
select * from guest order by id asc where rownum < 6
答案 5 :(得分:0)
此查询将为您提供第3,第5和第4项(limit 2, 1
表示“从第3项开始检索,检索总数= 1条记录)
(select g_id from Guest limit 2,1)
UNION (select g_id from Guest limit 4,1
UNION (select g_id from Guest limit 3,1)