SQL:选择语句顺序依据

时间:2014-04-20 01:52:22

标签: mysql sql

我想选择一个列,但顺序不同:

我有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   |
+------+-----------+

感谢任何建议,。

3 个答案:

答案 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