我想选择一个列,但顺序不同:
我有2张桌子:
表名:
+------+-----------+
| id | name |
+------+-----------+
| 1 | Sindra |
| 2 | Auli |
| 3 | Brian |
| 4 | Bina |
| 5 | zian |
| 6 | Bri |
| 7 | Andre |
+------+-----------+
table_temp,id_temp_name id(table_name)的外键:
+------+--------------+
| id | id_temp_name |
+------+--------------+
| 1 | 1 |
| 2 | 3 |
| 3 | 4 |
| 4 | 2 |
+------+--------------+
使用此查询:
SELECT *
FROM table_name
WHERE id IN
(SELECT id_temp_name FROM table_temp)
结果总是和table_name一样,我正在寻找与id_temp_name顺序完全相同的结果,所以结果将是:
+------+-----------+
| id | name |
+------+-----------+
| 1 | Sindra |
| 3 | Brian |
| 4 | Bina |
| 2 | Auli |
+------+-----------+
感谢任何建议,。
答案 0 :(得分:2)
您需要在两个表之间将查询重写为JOIN
,然后您可以根据所涉及的任何列设置排序,即使不在最终结果集中也是如此:
SELECT table_name.id,
table_name.name
FROM table_name
INNER JOIN table_temp ON table_name.id = table_temp.id_temp_name
ORDER BY table_temp.id ;
答案 1 :(得分:2)
使用联接而不是子查询。
SELECT table_name.id, table_name.name
FROM table_name
INNER JOIN table_temp ON table_name.id = table_temp.id
ORDER BY table_temp.id_temp_name
而且......通常最好明确列出字段,而不是使用*来全部选择。
答案 2 :(得分:0)
您应该使用简单的 JOIN 来实现结果。
您的查询:
SELECT *
FROM table_name
WHERE id IN
(SELECT id_temp_name FROM table_temp)
实际上返回table_name表的所有行和列。因此,您无法获得所需的id_temp_name结果,因为它位于不同的表中。这就是为什么,您应该使用 LEFT JOIN ,因为您的左表是table_name,右表是table_temp,并且您想要显示table_temp列中的数据,即id_temp_name。
所以,你需要做的是:
SELECT tn.id, tn.name
FROM table_name AS tn
LEFT JOIN table_temp AS tt
ON tn.id= tt.id_temp_name
GROUP BY tn.id