Mysql SQL:按其他表选择语句顺序
我想选择一列,但顺序不同: 我有两张桌子: 表格名称:Mysql SQL:按其他表选择语句顺序,mysql,sql,Mysql,Sql,我想选择一列,但顺序不同: 我有两张桌子: 表格名称: +------+-----------+ | id | name | +------+-----------+ | 1 | Sindra | | 2 | Auli | | 3 | Brian | | 4 | Bina | | 5 | zian | | 6 | Bri | | 7 | Andre | +------+----
+------+-----------+
| id | name |
+------+-----------+
| 1 | Sindra |
| 2 | Auli |
| 3 | Brian |
| 4 | Bina |
| 5 | zian |
| 6 | Bri |
| 7 | Andre |
+------+-----------+
table_temp,id_temp_name idtable_name的外键:
+------+--------------+
| id | id_temp_name |
+------+--------------+
| 1 | 1 |
| 2 | 3 |
| 3 | 4 |
| 4 | 2 |
+------+--------------+
使用此查询:
SELECT table_name.id,table_name.name
FROM table_name JOIN table_temp ON table_name.id= table_temp.id_temp_name
ORDER BY table_temp.id_temp_name
我一直在寻找与id_temp_name order完全相同的结果,但它显示的值不在表中,因此结果将是:
+------+-----------+
| id | name |
+------+-----------+
| 1 | Sindra |
| 3 | Brian |
| 4 | Bina |
| 2 | Auli |
| 7 | Andre |
| 6 | Bri |
| 5 | zian |
+------+-----------+
感谢您的建议。编辑1后:
你可以继续
编辑2:
好的,然后看下面的例子,这会有用的
SELECT tgejala.id_gejala,tgejala.nama_gejala
FROM tgejala
LEFT JOIN ttemp ON tgejala.id_gejala= ttemp.idtemp_gejala
ORDER BY CASE WHEN ttemp.id_temp is NULL THEN 1 ELSE 0 END, table_name.id desc
这将为您提供以下结果
+------+-----------+
| id | name |
+------+-----------+
| 1 | Sindra |
| 3 | Brian |
| 4 | Bina |
| 2 | Auli |
| 7 | Andre |
| 6 | Bri |
| 5 | zian |
+------+-----------+
编辑1后:
你可以继续
编辑2:
好的,然后看下面的例子,这会有用的
SELECT tgejala.id_gejala,tgejala.nama_gejala
FROM tgejala
LEFT JOIN ttemp ON tgejala.id_gejala= ttemp.idtemp_gejala
ORDER BY CASE WHEN ttemp.id_temp is NULL THEN 1 ELSE 0 END, table_name.id desc
这将为您提供以下结果
+------+-----------+
| id | name |
+------+-----------+
| 1 | Sindra |
| 3 | Brian |
| 4 | Bina |
| 2 | Auli |
| 7 | Andre |
| 6 | Bri |
| 5 | zian |
+------+-----------+
如果我理解正确,您需要一个左外部联接,以便在第一个表中保留所有记录:
SELECT tn.id, tn.name
FROM table_name tn LEFT OUTER JOIN
table_temp tt
ON tn.id= tt.id_temp_name
ORDER BY (tt.id_temp_name is not null) desc,
tt.id_temp_name ;
order by中的第一个条件是,无论第二个子句的顺序如何,都要确保缺少的值最后一个。如果我理解正确,您需要一个左外部联接,以便保留第一个表中的所有记录:
SELECT tn.id, tn.name
FROM table_name tn LEFT OUTER JOIN
table_temp tt
ON tn.id= tt.id_temp_name
ORDER BY (tt.id_temp_name is not null) desc,
tt.id_temp_name ;
order by中的第一个条件是,无论第二个子句的顺序如何,都要确保缺少的值最后出现。尝试以下方法:
Select a.id_temp_name, b.name
from table_temp a, table_name b
where a.id = b.id
order by a.id_temp_name;
看看这是否适合你。试试这个:
Select a.id_temp_name, b.name
from table_temp a, table_name b
where a.id = b.id
order by a.id_temp_name;
看看这是否适合您。以下是解决SQL Server问题的方法:
SELECT table_name.id,table_name.name
FROM table_name as table_name
LEFT JOIN table_temp as table_temp ON table_name.id= table_temp.id_temp_name
ORDER BY CASE
WHEN cast(table_temp.id as varchar) IS NOT NULL
THEN cast(table_temp.id as varchar)
ELSE table_name.name END asc
以下是解决SQL Server中问题的解决方案:
SELECT table_name.id,table_name.name
FROM table_name as table_name
LEFT JOIN table_temp as table_temp ON table_name.id= table_temp.id_temp_name
ORDER BY CASE
WHEN cast(table_temp.id as varchar) IS NOT NULL
THEN cast(table_temp.id as varchar)
ELSE table_name.name END asc
现在,我尝试了很多次,我可以找到显示结果与您所需完全相同的查询。但这项工作必须分两步进行,并假设ID不能为负值 步骤1:创建有价值的:
mysql> SET @max_id = (SELECT MAX(id) FROM table_name) * 2;
Query OK, 0 rows affected (0.00 sec)
步骤2:使用上述变量的嵌套查询:
mysql> SELECT a.id,
-> a.name
-> FROM (
-> SELECT t.id as `id`,
-> t.name as `name`,
-> IF(t2.id, t2.id, @max_id := @max_id - 1) as `id2`
-> FROM table_name t
-> LEFT OUTER JOIN table_temp t2
-> ON t.id= t2.id_temp_name
-> GROUP BY t.id
-> ORDER BY CASE WHEN t2.id THEN t2.id
-> ELSE -t.id END
-> ) as a
-> ORDER BY a.id2;
+------+--------+
| id | name |
+------+--------+
| 1 | Sindra |
| 3 | Brian |
| 4 | Bina |
| 2 | Auli |
| 7 | Andre |
| 6 | Bri |
| 5 | zian |
+------+--------+
7 rows in set (0.00 sec)
检查它是否正常工作
逻辑非常简单,我使用了一些数学知识,并在内部SQL查询中动态添加了新Id。我在表_name中使用了两倍于当前id最大值的max_id变量,因为我生成的id应该比max大,并且按降序进行了减法
试试看 现在,我尝试了很多次,我可以找到显示结果与您所需完全相同的查询。但这项工作必须分两步进行,并假设ID不能为负值 步骤1:创建有价值的:
mysql> SET @max_id = (SELECT MAX(id) FROM table_name) * 2;
Query OK, 0 rows affected (0.00 sec)
步骤2:使用上述变量的嵌套查询:
mysql> SELECT a.id,
-> a.name
-> FROM (
-> SELECT t.id as `id`,
-> t.name as `name`,
-> IF(t2.id, t2.id, @max_id := @max_id - 1) as `id2`
-> FROM table_name t
-> LEFT OUTER JOIN table_temp t2
-> ON t.id= t2.id_temp_name
-> GROUP BY t.id
-> ORDER BY CASE WHEN t2.id THEN t2.id
-> ELSE -t.id END
-> ) as a
-> ORDER BY a.id2;
+------+--------+
| id | name |
+------+--------+
| 1 | Sindra |
| 3 | Brian |
| 4 | Bina |
| 2 | Auli |
| 7 | Andre |
| 6 | Bri |
| 5 | zian |
+------+--------+
7 rows in set (0.00 sec)
检查它是否正常工作
逻辑非常简单,我使用了一些数学知识,并在内部SQL查询中动态添加了新Id。我在表_name中使用了两倍于当前id最大值的max_id变量,因为我生成的id应该比max大,并且按降序进行了减法
试试看 使用Left join和order id\u temp\u name根据查询中的表在问题中使用当前术语,或使用别名抱歉,我编辑了我的查询,:。请再次查看。@walk.this\u way如果7,6,5在1,3,4,2之前会怎样?@GrijeshChauhan这正是问题所在,7,6,5在1,3,4,2之前使用Left join和order id\u temp\u name根据查询中的表在问题中使用当前术语或使用别名抱歉我编辑了我的查询,:。请再看一次。@walk.this\u way如果7,6,5排在1,3,4,2之前呢?@GrijeshChauhan这正是问题所在,7,6,5排在1,3,4,2之前结果很好,但是表中没有的值名是list first,如何将它排到最后谢谢@prime\u of_india,结果很好,但它不是我要找的列表,它排序上升,我在寻找表ttemp.idtemp_gejala中的第一个排序是tgejala.nama_gejala,然后将不在ttemp.idtemp_gejala中的tgejala.nama_gejala排序,并按升序排序。。谢谢你的建议,对不起我的英语:@walk.this\u如果你真的能解释你真正想要什么,只有这样我们才能帮助结果很好,但表中没有的值名称是list first,如何将它列到last谢谢@prime\u president\u of_india,结果很好,但不是我要的列表,它排序上升,我在寻找表ttemp.idtemp_gejala中的第一个排序是tgejala.nama_gejala,然后将不在ttemp.idtemp_gejala中的tgejala.nama_gejala排序,并按升序排序。。谢谢你的建议,对不起,我的英文是:@walk.this\u如果你真的能解释你真正想要什么,只有这样我们才能帮助你谢谢:D,我今天已经找了4个多小时了。如果我在sqlite中使用该查询,它会工作吗?@walk.this_way,但印度总理的答案不工作吗?它工作,但排序不正确,结果:4,3,2,1,7,6,5,我找不到任何方法修改它使其工作。。它会在sqlite中工作吗??顺便说一句,非常感谢:D@walk.this_way是的,我试过了。我试图修改他更快的查询。谢谢你,我从来没有试过这个问题。谢谢:D,我今天已经找了4个多小时了。如果我在sqlite?@walk.this_方式中使用该查询,它会起作用吗?但印度总理的回答不起作用吗?它起作用, 但是排序是不正确的,结果是:4,3,2,1,7,6,5,我找不到任何方法来修改它使其工作。。它会在sqlite中工作吗??顺便说一句,非常感谢:D@walk.this_way是的,我试过了。我试图修改他更快的查询。顺便说一句,谢谢你,我从来没有试过这个问题。