我运行的是MySQL 5.1.61,MyISAM表设置为

objects:
id | owner | created_date
---------------------------------
1  | xxx   | xxxxxxxx
2  | xxx   | xxxxxxxx

photos:
id | width | height | url
-------------------------
2  | 800   | 480    | http://somewhere.com/photo.jpeg

posts:
id | message
------------
1  | Hello, world!
2  | Goodbye!

我想要一些像
SELECT * FROM objects LEFT JOIN posts ON objects.id=posts.id LEFT JOIN photos ON objects.id=photos.id

但是运行这个查询给了我
id | owner | created_date | id | message | id   | width | height | url
----------------------------------------------------------------------
1  | xxx   | xxxxxxxx     | 1  | Hell... | NULL | NULL  | NULL   | NULL
2  | xxx   | xxxxxxxx     | 2  | Good... | 2    | 800   | 480    | http://som....

这就是我想要的,除了重复的id列。
如果不把我想要的所有列都拼出来,那会很乏味,但只能拼一次,我怎么才能去掉那些重复的id列呢?我只想要一个列,因为它们都有相同的值。
还要注意,我可能会添加更多的表,比如“video”、“url”,因此不仅仅是这两个表。
谢谢您。

最佳答案

如果不把我想要的所有列都拼出来,那会很乏味,但只能拼一次,我怎么才能去掉那些重复的id列呢?
您应该显式地拼出这些列。
你可以用USING做你想做的事,但我还是建议不要使用SELECT *

SELECT *
FROM objects
LEFT JOIN posts USING (id)
LEFT JOIN photos USING (id)

结果:
ID  OWNER   CREATED_DATE    MESSAGE         WIDTH   HEIGHT  URL
1   xxx     xxxxxxxx        Hello, world!   (null)  (null)  (null)
2   xxx     xxxxxxxx        Goodbye!        800     480     http://somewhere.com/photo.jpeg

在线查看工作:sqlfiddle

关于mysql - 如何选择具有ID以外的其他列的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10922929/

10-11 19:27
查看更多