我有一个我没写过的代码。它包含一个特定的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。
如果没有,我的其他解决方案是什么?
基本上,我不想触及大的条件,因为它是动态的,来自代码中的其他功能,我不想在任何地方改变它。
谢谢。
答案 0 :(得分:1)
您应该限定所有列名称。这只是一种很好的做法,它使代码更容易理解和维护。
也就是说,如果使用USING
子句,则不需要限定联接中使用的列名。事实上,你不应该限定这些名称。所以,你可以安全地写:
SELECT id, t2.fieldB
FROM table1 t1 LEFT JOIN
table2 t2
USING (id)
WHERE id > 10;
注意:要使USING
子句起作用,列中的两个表必须具有相同的名称。我认为这是最好的做法 - 外键与主键名称相同(通常不是简单的id
)。
此外,您可以使用表别名来减少限定列名称时的键入量。