-1

我知道为您选择的列显式指定表的 MySQL 语法:

SELECT p1.first, p1.last FROM people p1 /* JOIN */;

但是,MySQL 是否允许语法 ~ (见下文)可以达到相同的结果?

SELECT p1 (first, last) FROM people p1 /* JOIN */;

我遇到的常见问题是我已经有一个表示 SELECT 语句的连接字符串,尽管我需要为这些值添加前缀,例如我的字符串是first, last,尽管实际查询是期望的p1.first, p1.last。所描述的场景是在程序级别。

4

3 回答 3

2

你的问题的答案是,不,这是不允许的。

在使用连接字符串构建查询时,您确实需要小心,以免暴露 SQL 注入漏洞(如果这些字符串包含来自用户的数据输入)。

于 2013-03-19T17:34:01.800 回答
1

没有语法可以满足您的要求,但您只需限定非唯一列的列名。如果firstlast列仅存在于p1,则p1.不需要 。

如果不是这种情况,那么如果您要加入特定列,您可以使用USING它来解决这个问题。例如:

SELECT first, last FROM people p1 JOIN people p2 USING (first, last)

已验证。但是,如果您ON改用它,您仍然必须限定列名。

如果列存在于多个表中并且您没有加入它们,那么您将无法在字段列表中限定列名。

于 2013-03-19T17:33:43.287 回答
0

如果问题是将表别名“注入”到预先构建的列列表中,您可以尝试以下操作:

CONCAT(table_alias, '.', REPLACE(column_list, ', ', CONCAT(', ', table_alias, '.')))

即用逗号+空格+表别名后跟a替换列表中的每个逗号+空格,.同时在列表的开头添加带有a的别名.。当然,这假设列表不以逗号 + 空格结尾。

请不要告诉我你在列名中有逗号

于 2013-03-19T18:53:22.357 回答