我有一個非常複雜的查詢。我所擁有的是帶有汽車零件(parts_list,大約600行)的表格,其中包含關於零件的一些信息,如名稱以及是否依賴於電機。對於運動依賴我有兩個不同的查詢,所以這是沒有電機依賴的(0,我將它另存爲布爾值)。大部分零件都可以拆卸並分解成更多零件,這就是爲什麼我將零件保存爲樹的原因,並且在該查詢中,我只拿取了無法拆卸的零件(樹葉)。該表僅表示可能部分的列表。現在,對於每個車型,我在另一個表格(零件)中保存一行,然後將parts_list_id和model_id粘貼在一起,然後將價格和數量粘貼在一起。現在,如果我運行查詢,它將成功地在表「parts」中生成大約500行(僅包含葉子部分),並且它將執行我所需的操作。模型ID約500(葉)部分。但有時候我會爲特定部分的另一個模型生成一行。然後查詢不會剩餘499行。它只適用於WHERE NOT EXISTS選擇查詢返回0的情況。如果即使存在一行,也不會插入其餘的。但它對我來說沒有意義,因爲它不應該像循環一樣檢查不同的值嗎?MySQL插入不存在的查詢將不會插入,如果即使只有一行
INSERT INTO parts (parts_list_id, model_id, motor_id)
SELECT orig1.id, '" . $this->model_id . "', '0'
FROM parts_list AS orig1
LEFT JOIN parts_list AS orig2 ON (orig1.id = orig2.parent_id)
WHERE orig2.id IS NULL
AND orig1.motor_dependent = '0'
AND NOT EXISTS (
SELECT t1.id
FROM parts_list AS t1
LEFT JOIN parts_list AS t2 ON (t1.id = t2.parent_id)
LEFT JOIN parts ON (parts.parts_list_id = t1.id)
WHERE t2.id IS NULL
AND t1.motor_dependent = '0'
AND parts.parts_list_id = t1.id
AND parts.model_id = :model_id
)
謝謝,我不知道NOT EXIST對於所有行都是全局的。我設法通過鎖定兩個id來處理它 - 來自WHERE NOT EXISTS子句中的子查詢和SELECT查詢中的子查詢。但無論如何我沒有使用正確的關鍵字。不是什麼應該使用。 – Tony 2013-05-10 16:13:39
歡迎您有愉快的一天 – gpicchiarelli 2013-05-11 17:41:33