为什么在MySQL查询中在每个值前面使用字母?

为什么在MySQL查询中在每个值前面使用字母?,mysql,Mysql,为什么我要在我的查询中在每个值前面使用字母? 在数据库中,每个值前面都没有字母 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)

为什么我要在我的查询中在每个值前面使用字母? 在数据库中,每个值前面都没有字母

    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)

我已尝试查找它,但在任何地方都找不到它。

在SQL中,需要使用多个表进行查询时,可以执行以下操作:

SELECT person.name, vehicle.id FROM person, vehicle;
或者你可以做得更小,像这样

SELECT p.name, v.id FROM person p, vehicle v;

这只是为了减少查询长度,而且前面的字母对您很有用,我假定您指的是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 region_id = region_id
SQL编译器无法对此进行解释,因为它不知道区域id来自何处。是来自客户还是地区?如果在select中使用此选项,则会出现相同的问题-由于左连接,这会产生不同。在相关子查询中也是如此

通常,出于以下几个原因对列名进行限定是一种良好的做法:

这个查询是明确的。 您和其他人很容易知道列的来源。 如果修改查询并添加新表/子查询,则不必担心命名冲突。 如果基础表被修改为具有与其他表共享的新列名,则查询仍将编译。
假设您正在访问两个表,并且两个表都有相同的列名,比如“Id”,在查询中,若第一个表的别名为“a”,而第二个表的别名为“b”,则可以使用字母a.Id==d.Id轻松标识这些列。否则,很难确定哪一列属于哪一个表,尤其是当您有公共表列时。

字母。表示法是指表的别名…读取以避免我会阅读mysql文档的疑惑;阅读此内容是否确定?它仅用于缩短查询长度?较小表示使用别名
ON region_id = region_id