2014-06-20 18 views
0

我需要一套〜5K食譜和MySQL的:找到表A列於表乙不表明或C

  1. 刪除那些沒有被歸類
  2. 刪除的那些這已經被分批

這應該離開我與分類,unbatched配方列表。

我發現很難從初始設置中減去記錄,特別是當每個設置都在10k左右時。我一直試圖使用的查詢要麼是緩慢的,要麼是返回的結果,我對此沒有把握。我只是想在數字上得到一些答案,因此查詢不必特別快 - 合理的做。這些是我正在使用的表格:

表食譜:這些是我們正在操作的食譜。這些ID是獨一無二的。

mysql> select id, title from recipes limit 10; 
+---------+---------------------------------------------+ 
| id  | title          | 
+---------+---------------------------------------------+ 
| R162739 | Chipotle Steak        | 
| R223652 | Sweet Pea Mash on Toast      | 
| R216897 | Horchata Latte        | 
| R125550 | Roasted Beet and Fennel Salad    | 
| R196267 | Sweet Potatoes with Fruit     | 
| R215630 | Mini Oatmeal-Raisin Cookies     | 
| R219133 | Pork with Butternut Squash     | 
| R166935 | Herb-Ginger Bulgur       | 
| R208872 | Chocolate-Macadamia Dreams     | 
| R220442 | Smoked Turkey Salad       | 
+---------+---------------------------------------------+ 

表recipe_log:每次有人添加配方到一個類別,記在日誌表中進行。日誌表有大約14k條記錄 - 其中許多不是我感興趣的類型.Ids不是唯一的 - 相同的配方ID可能有許多記錄。

mysql> select * from recipe_log where type='category changes' limit 10; 
+---------+---------------------+------------------+------+ 
| id  | date    | type    | note | 
+---------+---------------------+------------------+------+ 
| R216064 | 2014-05-23 19:05:47 | category changes | NULL | 
| R216064 | 2014-05-23 19:06:11 | category changes | NULL | 
| R178159 | 2014-05-23 21:55:08 | category changes | NULL | 
| R178159 | 2014-05-24 02:13:34 | category changes | NULL | 
| R178159 | 2014-05-24 21:49:20 | category changes | NULL | 
| r178159 | 2014-05-24 21:52:52 | category changes | NULL | 
| r178613 | 2014-05-24 21:58:07 | category changes | NULL | 
| r178613 | 2014-05-24 21:59:24 | category changes | NULL | 
| r178159 | 2014-05-24 22:00:11 | category changes | NULL | 
| r178613 | 2014-05-24 22:00:51 | category changes | NULL | 
+---------+---------------------+------------------+------+ 

表recipe_batches:本表包含已經被添加到一個批次配方。 Ids不是唯一的 - 相同的配方可能會添加到多個批次中。這張表中大約有10條記錄。

mysql> select recipe_id, batch_id, date from recipe_batches limit 10; 
+-----------+----------+---------------------+ 
| recipe_id | batch_id | date    | 
+-----------+----------+---------------------+ 
| R109651 | EH_1_250 | 2014-06-04 01:01:01 | 
| R111068 | EH_1_250 | 2014-06-04 01:01:01 | 
| R113500 | EH_1_250 | 2014-06-04 01:01:01 | 
| R117349 | EH_1_250 | 2014-06-04 01:01:01 | 
| R117494 | EH_1_250 | 2014-06-04 01:01:01 | 
| R109648 | EH_1_250 | 2014-06-04 01:01:01 | 
| R109652 | EH_1_250 | 2014-06-04 01:01:01 | 
| R110440 | EH_1_250 | 2014-06-04 01:01:01 | 
| R113004 | EH_1_250 | 2014-06-04 01:01:01 | 
| R111068 | EH_1_250 | 2014-06-04 01:01:01 | 
+-----------+----------+---------------------+ 

回答

0

可以通過先得到一個,因爲你要保留和刪除已配料的那些被歸類列表中得到recipe_id的名單。除非我理解錯誤,否則每個已分類的配方都應退回,除非它也是批處理。

select distinct a.recipe_id 
from recipe_log a 
where a.type='category changes' 
and not exists (select * from recipe_batches b where a.recipe_id = b.recipe_id) 
+0

我絕對用你的邏輯;獲得已經分類的那些數據,只需從其他表中刪除其餘數據即可。 – Jhecht

+0

是的我不確定他是否真的想要運行DELETE或只是獲取ID列表。 – SQLChao

+0

是的,我看到你在說什麼,他說刪除。我認爲我們正在倒退,首先得到過濾的東西,然後處理大的東西,然而由於某種原因,他希望從乾草堆中開始,將堆積的細細的堆積起來,直到他拿到針。 – Jhecht