Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写具有重复列名的MySql查询的有效方法_Mysql_Sql - Fatal编程技术网

编写具有重复列名的MySql查询的有效方法

编写具有重复列名的MySql查询的有效方法,mysql,sql,Mysql,Sql,我有一个相当简单的MySQL查询,如下所示: SELECT * FROM post INNER JOIN comment ON post.post_id = comment.post_id WHERE post.host = 99999 ORDER BY post.post_id 我的问题是,我的一些列名在post和comment表中都是通用的。在结果中,列名只出现一次,其值取自查询中的最后一个表(即注释表) 我意识到我可以在查询的SELECT部分显式列出每个列名,并使用别名来区分重复的列名

我有一个相当简单的MySQL查询,如下所示:

SELECT * 
FROM post INNER JOIN comment ON post.post_id = comment.post_id
WHERE post.host = 99999
ORDER BY post.post_id
我的问题是,我的一些列名在post和comment表中都是通用的。在结果中,列名只出现一次,其值取自查询中的最后一个表(即注释表)

我意识到我可以在查询的
SELECT
部分显式列出每个列名,并使用别名来区分重复的列名,但是每个表中都有很多列,这会很混乱


有没有更有效的方法呢?

对于那些相似的列,您应该使用别名,然后对于其余的列,使用*别名:

SELECT post.post_id, comment.post_id as comment_post_id, *
FROM ...
我认为没有更好的办法


祝您好运。

您可以从这两个表中选择所有列。只需在select语句之后为这两个表名和use alias.*指定一个别名即可

然后它将从表中选择所有列

例如:

SELECT pst.*,cmt.* from post pst INNER JOIN comment cmt
FROM ...

列出列名总是一种更好的方法,只要可行,它可能会给MySQL优化器一些提示

此外,当对类似的列名进行连接时,我将使用语法

SELECT x.x1, x.x2 ... , y.x1, y.x2 ... 
FROM post as x 
INNER JOIN comment as y 
USING post_id
WHERE ...

如果您在类似的列上使用
内部联接
,那么您也可以使用
使用
语法。