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

我有2张桌子:

TABLE_NAME:

+------+-----------+
| 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 order完全相同的结果,因此结果将是:

+------+-----------+
| id   | name      |
+------+-----------+
| 1    |    Sindra |
| 3    |    Brian  |
| 4    |    Bina   |
| 2    |    Auli   |
+------+-----------+

感谢您的任何建议。

===============>>#1 票数: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 ;

===============>>#2 票数: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

而且...通常最好显式列出字段,而不要使用*来全选。

===============>>#3 票数: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

  ask by walk.this_way translate from so

未解决问题?本站智能推荐: