【问题标题】:"Not unique table/alias" in MySQLMySQL中的“非唯一表/别名”
【发布时间】:2014-07-04 08:47:26
【问题描述】:

下面的代码给了我不是唯一的表格/别名:'presentations'

我已经阅读了几篇关于此的文章,并且我很确定解决方案是为我的表使用别名。我只是不明白我是如何创建别名的,或者我应该在哪里添加它们。

有人可以帮我解释一下吗?

谢谢!

SELECT categories.name, categories.sub_name, parts.name
FROM categories
INNER JOIN presentations
ON categories.id=presentations.category
INNER JOIN presentations
ON parts.id=presentations.parts
WHERE presentations.id=5;

【问题讨论】:

    标签: mysql join unique alias


    【解决方案1】:

    在表名或字段名之后可以给别名,你可以使用它。

    SELECT C.name, C.sub_name, PT.name
    FROM categories C
    INNER JOIN presentations P
    ON C.id=P.category
    INNER JOIN parts PT
    ON PT.id=P.parts
    WHERE P.id=5;
    

    在上面的例子中C,PT,P分别是categories,presentation,parts表的别名。

    【讨论】:

    • 非常感谢!我以为有标准别名,但现在我知道我可以自己命名。
    【解决方案2】:

    您要加入同一个表 2 次,因此您需要提供唯一的别名。但是看起来您正在寻找parts 表,因此需要加入该表

    SELECT 
    categories.name, 
    categories.sub_name, 
    parts.name
    FROM categories
    INNER JOIN presentations ON categories.id=presentations.category
    INNER JOIN parts ON parts.id=presentations.parts
    WHERE presentations.id=5;
    

    为了更好的可读性,您总是可以给一些短别名

    select
    c.name,
    c.sub_name,
    p.name as parts_name
    from categories c
    join presentations pr on pr.category = c.id
    join parts p on p.id = pr.parts
    where pr.id = 5
    

    【讨论】:

    • 谢谢!所以问题与别名无关,而是我错误地加入了两个表?我以为我加入了“零件”表:INNER JOIN presentations ON parts.id=presentations.parts我还想知道为什么只为选定的三列中的一(1)列添加了as parts_name
    • 是的,这就是问题所在,但是当您多次加入同一个表时,将来可能需要确保为连接提供唯一的别名,否则您将得到与上述相同的错误!现在parts_name 我已经添加了,以便应用程序脚本在获取数据时知道它正在获取哪个项目,如果您将其保留为name,那么您有来自 2 个表的 2 个名称,并且在您显示数据时可能会发生冲突。
    • 但是如果你删除as parts_name它仍然说p.name应该足够了,如果c.name足够了?即使我删除了as parts_name,您的脚本仍然有效。
    • 这将在您的 mysql 终端或 phpmyadmin 中,但在应用程序级别说,在 PHP 中它将引用 name 作为索引。
    • 哦,现在我明白了!我忘记了。非常感谢您解释这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    相关资源
    最近更新 更多