MySQL-删除用于连接的ID列

MySQL-删除用于连接的ID列,mysql,sql,database,Mysql,Sql,Database,我有3个数据表,我正在连接在一起。我在每个表中使用ID列(day)将数据连接在一起。以下SQL查询有效,并提供以下列集: SELECT * FROM records LEFT JOIN macro_nutrients ON macro_nutrients.day = records.day LEFT JOIN micro_nutrients ON micro_nutrients.day = records.day day|date|calories_in|calories_out|day

我有3个数据表,我正在连接在一起。我在每个表中使用ID列(day)将数据连接在一起。以下SQL查询有效,并提供以下列集:

SELECT * 
FROM records 
LEFT JOIN macro_nutrients ON macro_nutrients.day = records.day 
LEFT JOIN micro_nutrients ON micro_nutrients.day = records.day

day|date|calories_in|calories_out|day|fat|sugar|protein|day|iron|cholesterol|potassium|vitamin_a|vitamin_c|
当我连接表时,“day”字段(作为连接表的主键)每次都会被输出(3个表将列出3个day字段)。我想从我的列集中排除day字段,因为它们不是必需的


只有在我的select语句中明确提到我想要的字段(如macro_nutrients.fat)才能实现这一点吗?不幸的是,如果是这样的话,这将变得非常冗长。想知道是否有更简洁的方法。

您可以使用
使用

SELECT * 
FROM records r LEFT JOIN
     macro_nutrients man
     USING (day) LEFT JOIN
     micro_nutrients mn
     USING (day);

使用
是SQLite和MySQL都支持的SQL标准语法。当
*
USING
一起使用时,用作
连接
键的列在结果集中不会重复。在外部联接中,值是数据中的实际值,而不是不匹配的
NULL
值。

您必须选择所有列:

SELECT date calories_in calories_out fat sugar protein iron cholesterol potassium vitamin_a vitamin_c
FROM records
LEFT JOIN macro_nutrients ON macro_nutrients.day = records.day 
LEFT JOIN micro_nutrients ON micro_nutrients.day = records.day

这也比
*
符号更好,因为您可以决定列的顺序。

如果您想要更多地控制要检索的列,请不要使用
SELECT*
。“using”命令非常有效。数据集按预期合并,结果集中没有重复id。