我的sql

时间:2018-05-28 08:28:27

标签: mysql sql

我遇到了这个SQL脚本,它的工作方式就像它的意思一样,但我一直试图在脚本中找出 T 的功能。

 sprintf("SELECT username 
FROM (SELECT * FROM users
      WHERE spillover_sponsor=%s 
      ORDER BY unique_id DESC 
      LIMIT 3) t
ORDER BY unique_id ASC LIMIT 1", GetSQLValueString($_POST['mysponsor'], "text"));

4 个答案:

答案 0 :(得分:2)

T是内部查询的别名

(SELECT * FROM users
  WHERE spillover_sponsor=%s 
  ORDER BY unique_id DESC 
  LIMIT 3) t

别名可用于为列或表创建临时名称: -

column_name [ AS ] alias_column_name
table_name [ AS ] alias_table_name

AS是一个可选参数,可以根据编码样式首选项使用或省略。

答案 1 :(得分:2)

t这里是SQL部分查询结果表的别名:

  SELECT * FROM users
  WHERE spillover_sponsor=%s 
  ORDER BY unique_id DESC 
  LIMIT 3

有关详细信息,请参阅SELECT语句中有关如何使用子查询的帖子: https://www.essentialsql.com/get-ready-to-learn-sql-server-20-using-subqueries-in-the-select-statement/

答案 2 :(得分:1)

它是括号之间的子查询的临时结果的别名。 你可以使用AS t更明确,或者你可以给它一个更有意义的名字。

SELECT username
FROM (SELECT * FROM users 
      WHERE spillover_sponsor=%s
      ORDER BY unique_id DESC LIMIT 3)
AS SponseredByMySponsor 
ORDER BY unique_id ASC LIMIT 1

SQL要求您在使用类似的子查询时为其命名。

答案 3 :(得分:0)

其他答案涵盖了t的内容。更重要的是,它不是必需的。您可以使用offset编写查询,而不使用子查询:

SELECT u.*
FROM users u
WHERE u.spillover_sponsor = %s 
ORDER BY u.unique_id DESC 
LIMIT 3 OFFSET 2;

哦,看!我使用u作为users的表别名。这与t完全相同。