为啥在 MySQL 查询中每个值前面都使用字母?
Posted
技术标签:
【中文标题】为啥在 MySQL 查询中每个值前面都使用字母?【英文标题】:Why use letters in front of each value in MySQL query?为什么在 MySQL 查询中每个值前面都使用字母? 【发布时间】:2015-05-12 11:02:08 【问题描述】:为什么我要像这样在查询中的每个值前面使用字母? 在数据库中,这些值中的每一个都没有前面的字母。
SELECT c.client_id, c.client_name, c.contactperson, c.internal_comment,
IF NULL(r.region, 'Alle byer') as region, c.phone, c.email,
uu.fullname as changed_by,
(select count(p.project_id)
from projects p
where p.client_id = c.client_id and (p.is_deleted != 1 or p.is_deleted is null)
) as numProjects
FROM clients c LEFT JOIN users uu ON c.db_changed_by = uu.id
LEFT JOIN regions r ON c.region_id = r.region_id
WHERE (c.is_deleted != 1 or c.is_deleted is null)
我已经尝试查找它,但我无法在任何地方找到它。
【问题讨论】:
这封信。表示法是指表的别名... 阅读mysqltutorial.org/mysql-alias 为了避免我会阅读 mysql 文档的疑惑;) 阅读此***.com/questions/198196/when-to-use-sql-table-alias 【参考方案1】:当在 SQL 中您需要使用多个表进行查询时,您可以这样做:
SELECT person.name, vehicle.id FROM person, vehicle;
或者你可以把它做得更小,像这样放
SELECT p.name, v.id FROM person p, vehicle v;
只是为了减少查询长度,对你有用
【讨论】:
你确定 -Its only for reduce the query lenght
?
较小表示您使用 ALIAS
接受的答案不准确。您应该考虑检查以下答案。【参考方案2】:
“前面的字母”是指c.
、uu.
等列上的限定符。它们指示列的来源表。从某种意义上说,它们是列定义的一部分。
这是您的查询:
SELECT c.client_id, c.client_name, c.contactperson, c.internal_comment,
IF NULL(r.region, 'Alle byer') as region, c.phone, c.email,
uu.fullname as changed_by,
(select count(p.project_id)
from projects p
where p.client_id = c.client_id and (p.is_deleted != 1 or p.is_deleted is null)
) as numProjects
FROM clients c LEFT JOIN
users uu
ON c.db_changed_by = uu.id LEFT JOIN
regions r
ON c.region_id = r.region_id
WHERE (c.is_deleted != 1 or c.is_deleted is null)
在某些情况下,这些是必需的。考虑on
子句:
ON c.region_id = r.region_id
如果你把它们排除在外,你有:
ON region_id = region_id
SQL 编译器无法解释这一点,因为它不知道region_id
的来源。是来自clients
还是regions
?如果你在select
中使用它,你会遇到同样的问题——因为left join
会有所不同。在相关子查询中也是如此。
一般来说,限定列名是一种很好的做法,原因如下:
查询是明确的。 您(和其他人)很容易知道列的来源。 如果您修改查询并添加新表/子查询,则不必担心命名冲突。 如果修改基础表以具有与其他表共享的新列名,则查询仍将编译。【讨论】:
【参考方案3】:假设您正在访问 2 个表并且都具有相同的列名称,例如“Id”,在查询中,如果第一个表具有别名“a”和第二个,则可以使用 a.Id == d.Id 之类的字母轻松识别这些列表'b'。否则很难确定哪个列属于哪个表,尤其是当您有公共表列时。
【讨论】:
以上是关于为啥在 MySQL 查询中每个值前面都使用字母?的主要内容,如果未能解决你的问题,请参考以下文章