2016-09-16 12 views
1

私は私のコードでは、このクエリを見ている:これらの2つのクエリは同じですか?

INSERT INTO comments (post_id, user_id, table_code, content, author_id, pinged_id, date_time) 
SELECT ?,?,?,?,?,?,? 
FROM qanda qa, users u 
WHERE qa.id=? and author_id IS NULL 
limit 1; 

私は今、私は, user uは私のクエリで重複していると信じて...すでに上記のクエリを書いています。私は正しい?

なぜこの質問をしているのですか?なぜなら、常に私のすべてのコードの裏には理由があるからです。今私はこれを書く理由が何であるか覚えていません, users u。だから私はそれを取り除くことを心配している。

とにかく、, users uを削除すると何か変更されますか?またはそれは完全に冗長ですか?

+0

uが空白の場合、行は挿入されません。 uにデータが含まれていて、qaも含まれている場合は、1行が挿入されます。 – jarlh

+0

いいえ、2つのテーブルの間に 'CROSS JOIN'をしているような2番目のテーブルを追加してください(これはおそらく*あなたが望むものではありません) – Siyual

+0

' author_id'はどのテーブルに属していますか? –

答えて

2

author_idqandaテーブルに属しているため、usersテーブルへの暗黙的な結合は意味を持ちません。実際には、ジョイン条件は存在しないため、クロスジョインです。これは、実際のパフォーマンスホッグである可能性があることを意味します。

INSERT INTO comments (post_id, user_id, table_code, content, author_id, 
         pinged_id, date_time) 
SELECT ?,?,?,?,?,?,? 
FROM qanda qa 
WHERE qa.id=? AND author_id IS NULL 
LIMIT 1 

しかし、これはusers表が最初の場所でそこに行っていることを説明していません:あなたは、以下の単純化INSERTステートメントを使用して試すことができます。たぶんあなたは他の誰か(または何か)からこのクエリを継承していて、合法的な理由で一度にその結合が使用されたことがあります。それにかかわらず、あなたは簡単にそうすることができますが、今度は借金を取り除いてください。

+0

私の質問の下でコメントに「いいえ」と書かれた人もいます。あなたの質問*(質問の答え)*と私の質問*同一。あなたは彼らが同じであると確信していますか? –

+0

元のクエリがクロス結合しているので、 'qanda'テーブルのレコードが複数回挿入されることを期待します。' qanda'の各レコードは 'users'のレコードとペアになります。データが挿入されるのに奇妙なことに気付かなかったのですか? –

+0

少なくともテーブルuにデータがある限り、ほぼ同じです。 – jarlh

関連する問題