1

次のように、かなり単純な MySQL クエリがあります。

SELECT * 
FROM post INNER JOIN comment ON post.post_id = comment.post_id
WHERE post.host = 99999
ORDER BY post.post_id

私の問題は、列名の一部が投稿テーブルとコメント テーブルの両方に共通していることです。結果では、列名は 1 回だけ表示され、その値はクエリの最後のテーブル (つまり、コメント テーブル) から取得されます。

クエリの一部に各列名を明示的にリストし、SELECTエイリアスを使用して重複する列名を区別できることを認識していますが、各テーブルには多くの列があり、面倒です。

より効率的な方法はありますか?

4

3 に答える 3

3

似ている列にはエイリアスを使用し、残りの列には * を使用する必要があります。

SELECT post.post_id, comment.post_id as comment_post_id, *
FROM ...

より良いアプローチはないと思います。

幸運を。

于 2013-02-04T07:08:06.573 に答える
0

列名をリストすることは、実行可能である限り常により良いアプローチであり、MySQL オプティマイザーに何らかのヒントを与える可能性があります。

さらに、結合が同様の列名で行われる場合は、Using 構文を使用します。

SELECT x.x1, x.x2 ... , y.x1, y.x2 ... 
FROM post as x 
INNER JOIN comment as y 
USING post_id
WHERE ...
于 2013-02-04T08:27:26.720 に答える
-1

両方のテーブルからすべての列を選択できます。select ステートメントの後に、テーブル名と use alias.* の両方にエイリアスを与えるだけです。

次に、テーブルからすべての列を選択します。

例:

SELECT pst.*,cmt.* from post pst INNER JOIN comment cmt
FROM ...
于 2013-02-04T07:16:04.333 に答える