2017-04-30 4 views
0

MySQLの簡単なクエリで予想以上に時間がかかります。ネストされたクエリになると思いますが、簡単にはわかりません。簡単なSQLクエリ - 外部キーの整列

ユーザー、コメント、およびビジネスの3つのテーブルがあります。コメントにはbusiness_id、user_idには外部キーがあります。

ビジネスの番号を持つusers.nameとcomments.reviewの結果が必要です。

だから私の最初の(そして間違った)試みがあった。私はPrimaryKey.user_idがForeignKey.users.idに等しくなるように設定したい

SELECT users.name, users.image, comments.review 
FROM reviews JOIN users JOIN businesses 
WHERE reviews.user_id=users.id AND reviews.business_id=4; 

。 すべてのコメントから、business_id = 4のこれらのコメントを取りたいと思います。

これは、両方のWHERE句に失敗をもたらします。だから私は入れ子になったクエリでこれを修正することができますか多分JOIN句で?

ご協力いただければ幸いです! ありがとうございます。 [編集されたクエリ]

+1

*カンマを「FROM」句で使用しないでください。 *常に*適切で明示的な 'JOIN'構文を使用します。あなたはあなたの質問に質問を修正する必要があります。 –

+1

各JOINにはON句が必要です –

答えて

1

これを試してみてください。

select c.name,c.image,a.review 
from 
comments a 
inner join 
(select * from buisnesses where buisness_id = 4) b 
on a.buisness_id = b.buisness_id 
inner join 
users c 
on a.user_id = c.user_id; 

または

select b.name,b.image,a.review 
from 
comments a 
inner join 
users b 
on a.user_id = b.user_id 
where a.buisness_id = 4; 
+0

Lovin 'it!出来た! INNER句やJOIN句を使用していることがわかりませんでした:/そしてカンマで区切っているFROMはいつも私に働きました。私は多くの場所でそれを見ました。 ありがとうございました! : ') – ButterySAM777

+0

@gordan linoffの言葉通り、from文でカンマを使用しないでください。さらに、異なる結合を書く間にミスをする可能性も低くなります。この場合、最後ではなく前の条件を書き込むことで処理時間も節約できます。そして、あなたは歓迎です –

+0

@ Suzena MySQLsエンジンはWHERE節の条件をできるだけ早く使用します。したがって、サブクエリに条件をラップすることに意味はありません。 –

1

これを試してみてください:

SELECT 
    users.name, 
    users.image, 
    comments.review 
FROM reviews 
JOIN users 
ON reviews.user_id = users.id 
JOIN businesses 
ON reviews.business_id = business.business_id 
WHERE reviews.business_id=4; 

あなたがビジネステーブルから列のいずれかを使用していないので、あなたはおそらく、クエリからそれをドロップすることができ:

SELECT 
    users.name, 
    users.image, 
    comments.review 
FROM reviews 
JOIN users 
ON reviews.user_id = users.id 
WHERE reviews.business_id=4; 
+0

これははるかに良い答えですが、私はそれがテーブルのエイリアスを使用するのが好きです。 –

+0

@Gordon:ありがとう。 OPは新しいので、私はそれを簡単に保つと思った。テーブルのエイリアスも好きです。 –

+0

ありがとうございました!この最後のコードは私にとっても働きました。 迅速な対応をありがとう! – ButterySAM777