如果您需要一個優化的查詢,請提供適當的架構細節 - 表,數據類型和索引。
SELECT id, email
FROM users
WHERE id
IN (
SELECT user_id
FROM accounts
WHERE users.id = user_id
)
絕對不要使用子查詢,除非你絕對必須。既然你不想要帳戶表中的任何數據,在大多數數據庫管理系統中,'EXISTS(SELECT 1 FROM accounts WHERE users.id = user_id)'的效率會更高 - 但在MySQL中不會優化很好地推動謂詞。
查詢應該是:
SELECT DISTINCT u.id, u.email
FROM users u INNER JOIN accounts a
ON u.id=a.user_id;
從產品表,其中用戶購買了超過3個產品
雖然我可以猜到足夠的架構的重新編寫之前的查詢
出來,我不知道產品表是如何構建的,事實上,'產品'暗示着一個項目的目錄,並且與帳戶的關係似乎是一個n:m,這意味着必須有一個分解關係的缺失表。此外,根據您的描述,賬戶數據與「產品」表格數據無關(似乎很奇怪)。你想包括用戶在「產品」中沒有相關記錄的情況嗎?
假設這是不是這種情況,並且在猜測什麼結構可能....
SELECT u.id, u.email, SUM(IF(leader_id IS NULL, 0, amount))
FROM users u INNER JOIN accounts a
ON u.id=a.user_id
LEFT JOIN product p
ON u.id=p.leader_id
GROUP BY u.id, u.email;
我需要優化的查詢,因爲表非常大
爲什麼你需要在單個查詢中查看所有數據嗎?
沒有足夠的信息。我們不知道這些表格是如何相關的。我們不知道表中是否存在任何索引來提高性能,我們不知道您嘗試了什麼。 – xQbert 2013-03-13 12:23:58
確實....向我們展示了一些示例數據或您的表格結構;) – Hackerman 2013-03-13 12:25:00
@javier這是一個非常大的飛躍。假設每個表都有一個名爲ID的字段,我推斷它的意思是它們的主鍵,可能是Account_ID,Product_ID,User_ID或可能只是'ID',這個含糊性就是我問的原因。 – xQbert 2013-03-13 12:28:06