输出两个LEFT JOIN表Sql的相同字段名称

时间:2018-02-24 19:14:58

标签: sql left-join

我有两张桌子,每张约有20列

用户

id_user   user ..... status token
----------------------------------
   2      A             0   XdAQ

帖子

id_user  post .....  status   token
-------------------------------------
   3     hi             1     sDyTMl

查询:

SELECT u.*,p.*
FROM posts as p
LEFT JOIN users as u ON u.id_user = p.id_user
WHERE p.id_post = 3 
LIMIT 1

所以在Php中,可以检索任何值

 ....
 $status=$a['status'];
 $token=$a['token'];

我想返回每个表的所有字段来制作帖子内容,问题是每个表中相同列名之间存在冲突。在我的真实表格中,每个列都有超过20列,因此我认为用别名写下列名称是不可取的。有没有办法只对冲突中那些相同的列进行别名?

1 个答案:

答案 0 :(得分:0)

你真的应该列出你想要的特定列。这是从表中检索值的最安全的方法。

如果唯一的列是用于join的列,则可以使用USING子句:

SELECT *
FROM posts p LEFT JOIN
     users as u 
     USING (id_user)
WHERE p.id_post = 3
LIMIT 1;

USING子句是ANSI标准,但并非所有数据库都支持它。使用它时,id_post返回的列中只有一个SELECT *版本。在LEFT JOIN中,它是具有值的版本。​​

如果您有其他具有相同名称的列,则需要使用列别名。一个简短的方法是从一个表中获取所有列,并在另一个表中命名列:

SELECT u.*, p.col1 as p_col1, . . .
FROM posts p LEFT JOIN
     users as u 
     USING (id_user)
WHERE p.id_post = 3
LIMIT 1;
相关问题