我刚刚想通了。这可能是一种不好的做法,但在这种情况下它对我有用。
我是一个懒惰的人,不想用表前缀来别名或写出每个列名。
您可以在 select 语句中使用 table_name.* 从特定表中选择所有列。
当你有重复的列名时,mysql会从头到尾覆盖。当再次遇到该列名时,将覆盖第一个重复列名中的数据。所以最后出现的重复列名获胜。
如果我要连接 3 个表,每个表都包含重复的列名,则 select 语句中表的顺序将决定我为重复列获取的数据。
例子:
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
在上面的例子中,我得到的dup的值将来自table3。
如果我想让dup 成为table1 的值怎么办?
那么我需要这样做:
SELECT table3.* , table2.* , table1.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
现在,table1 排在最后,所以 dup 的值将是 table1 中的值。
我得到了我想要的 dup 的价值,而不必写出每一个可怕的列,我仍然可以使用所有列。耶!
我知道dup 的值在所有 3 个表中应该相同,但是如果table3 没有与dup 匹配的值怎么办?那么dup 在第一个示例中将是空白的,这将是一个无赖。