这两个查询是否相同?

时间:2016-09-16 12:31:46

标签: mysql sql

我在我的代码中看到了这个查询:

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会有什么变化吗?还是完全多余的?

1 个答案:

答案 0 :(得分:2)

由于author_id属于qanda表,因此对users表的隐式连接没有任何意义。事实上,它是一个交叉连接,因为没有连接条件,这意味着它可能是一个真正的性能生长。您可以尝试使用以下简化的INSERT语句:

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表首先在那里做什么。也许你从其他人(或其他东西)那里继承了这个查询,并且一次使用连接是出于正当理由。无论如何,现在就可以轻松取消债务。