2016-09-16 92 views
1

我看到这个查询在我的代码:这两个查询是否相同?

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

不是。如果你是空的,将不会插入任何行。如果你包含数据,并且还有qa,那么将插入1行。 – jarlh

+0

不,加入第二个表就是在两个表之间做一个'CROSS JOIN'(这可能是*不是*你想要的) – Siyual

+0

'author_id'属于哪个表? –

回答

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表摆在首位在那里做什么。也许你从其他人(或别的什么人)那里继承了这个查询,并且有一次这个连接被用于合法的原因。无论如何,你可以轻松地取消债务。

+0

看,有些人在我的问题下的评论中写了“不”,我的意思是,有些人相信你的查询*(在你的答案中)*和我*(在问题中)*不是相同。那你确定他们是一样的吗? –

+0

AFAIK您的原始查询正在进行交叉连接,因此我希望'qanda'表中的记录可以多次插入,每次记录在qanda中的每个记录都会与'users'中的记录配对。你没有注意到插入数据有什么奇怪的地方吗? –

+0

几乎相同,至少只要表u有数据。 – jarlh