我运行的是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/