1

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つの列だけが必要です。

また、「video」、「url」などのテーブルを追加する可能性があるため、これら2つのテーブルだけではないことにも注意してください。

ありがとうございました。

4

1 に答える 1

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

于 2012-06-06T22:02:39.940 に答える