【问题标题】:MySQL - Set table as default if empty prefixMySQL - 如果前缀为空,则将表设置为默认值
【发布时间】:2017-05-15 13:09:46
【问题描述】:

我有一个不是我写的代码。它包括一个特定的 SQL 查询。

为了我的个人用途,我想通过 LEFT JOIN 将其部分更改到另一个表,但代码更改最少。

问题:有几个不明确的字段。

由于 SQL 查询非常大,并且动态来自原始代码中的其他函数,因此给所有不明确的字段添加前缀让我很恼火。

我的问题是:有没有办法只为我的 LEFT JOIN 中的新表添加前缀,并使 MySQL 将没有前缀的字段视为表 A?

例子:

SELECT id, table2.fieldB FROM table1 LEFT JOIN table2 ON table2.id = id WHERE id > 10;

所有没有前缀的“id”出现都链接到table1。

如果没有,我的其他解决方案是什么?

基本上,我不想触及大条件,因为它是动态的并且来自代码中的其他函数,我不想到处更改它。

谢谢。

【问题讨论】:

    标签: mysql sql database select left-join


    【解决方案1】:

    您应该限定所有列名。这只是一个很好的做法,它使代码更易于理解和维护。

    也就是说,如果您使用USING 子句,则无需限定用于连接的列名。事实上,您不应该限定这些名称。所以,你可以放心地写:

    SELECT id, t2.fieldB
    FROM table1 t1 LEFT JOIN
         table2 t2
         USING (id)
    WHERE id > 10;
    

    注意:要使USING 子句起作用,列需要在两个表中具有相同的名称。无论如何,我认为这是一个最佳实践——外键与主键同名(通常不是简单的id)。

    此外,您可以使用表别名来减少限定列名时的输入量。

    【讨论】:

    • 感谢您的回复。不幸的是,就我而言,这两个字段的名称不同,所以我不能使用 USING。
    • @Jachinair。 . .在您问题的示例中,它们具有相同的名称。
    猜你喜欢
    • 2013-03-23
    • 2016-01-02
    • 2017-12-05
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    相关资源
    最近更新 更多