如何选择除id之外具有不同列的表

时间:2012-06-06 22:00:23

标签: mysql sql

我正在运行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列?我只想要一个专栏,因为无论如何他们都会有相同的价值。

另请注意,我可能会添加更多表格,例如“视频”,“网址”,因此不仅仅是这两个表。

谢谢。

1 个答案:

答案 0 :(得分:4)

  

如果没有拼写出我想要的所有列,那将是乏味但只有一次,我怎样才能摆脱那些重复的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