我遇到了这个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"));
答案 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
完全相同。