0

複数のテーブル間でデータを分割する方法をまだ学んでいるので、これが常識のように思える場合はご容赦ください。

基本的に、私は2つ持っています:

  • generalフィールドとuserID,owner,server,name
  • countフィールドとuserID,posts,topics

それらからデータを取得したいのですが、どのように行うべきかを決めることができません: UNION で:

SELECT `userID`, `owner`, `server`, `name`
FROM `english`.`general` 
WHERE `userID` = 54 LIMIT 1 
UNION
SELECT `posts`, `topics` 
FROM `english`.`count` 
WHERE `userID` = 54 LIMIT 1

または結合:

SELECT `general`.`userID`, `general`.`owner`, `general`.`server`, 
       `general`.`name`, `count`.`posts`, `count`.`topics` 
FROM `english`.`general` 
JOIN `english`.`count` ON 
     `general`.`userID`=`count`.`userID` AND `general`.`userID`=54 
LIMIT 1

どちらがより効率的な方法だと思いますか、またその理由は何ですか? それとも、両方とも最初から面倒すぎますか?

4

4 に答える 4

2

効率ではなく、それらがどのように機能するかについてです。

UNION2つの異なる独立したクエリを結合するだけです。したがって、2 つの結果セットが次々に取得されます。

JOINある結果セットの各行を別の結果セットの各行に追加します。したがって、合計結果セットには「長い」行があります(列の量に関して)

于 2012-09-09T20:52:01.123 に答える
0

JOINを使用したい。結合は、関連するデータの組み合わせである単一のセットを作成するために使用されます。あなたのユニオンの例は意味がありません (おそらく実行されません)。UNION は、同一の列を持つ 2 つの結果セットをリンクして、結合された行を持つセットを作成するためのものです (列を「結合」しません)。

于 2012-09-09T20:51:47.940 に答える
0

ユーザーと近いユーザーの投稿とトピックを取得する場合。次のように JOIN を使用して QUERY を記述する必要があります。

SELECT general.*,count.posts,count.topics FROM general LEFT JOIN count ON general.userID=count.userID
于 2012-09-09T20:59:57.030 に答える