2016-09-16 98 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