2012-04-19 37 views
1

我寫的是拋出一個錯誤,當它不能找到一個記錄的查詢:如果子查詢爲空,MySQL會優雅地中止嗎?

錯誤

列 'PRODUCT_ID' 不能爲空

MySQL的

INSERT INTO orders (date, product_id, quantity) 
VALUES ('11/29/2012', (
    SELECT product_id FROM products WHERE product_name = 'Oranges' 
), 12) 
; 

我實際上正在迭代我的PHP和一些product_name記錄不會存在。

我可以說,如果子查詢不返回任何東西,優雅地停止/中止,所以PHP可以繼續迭代?

回答

2

試試這個:

INSERT INTO orders (date, product_id, quantity) 
SELECT '11/29/2012', product_id, 12 
FROM products 
WHERE product_name = 'Oranges' 

如果沒有匹配的產品,查詢會成功,但不返回修改的行。如果您希望在執行查詢時可以讀取從PHP修改的行數。

請注意,如果有多個產品與product_name = 'Oranges'你會得到多行插入到您的表中。

+0

如果產品中沒有相應的行,則不會插入任何內容。 – 2012-04-19 20:44:24

+0

@Shedal:呃,是的...是一個問題嗎? – 2012-04-19 20:45:59

+1

@Shedal:我認爲這是關鍵。 – mdoyle 2012-04-19 20:46:43

1

如果您想要插入記錄,您可以嘗試回退到例如0如果不存在此類產品:

INSERT INTO orders (date, product_id, quantity) 
VALUES ('11/29/2012', COALESCE((
    SELECT product_id FROM products WHERE product_name = 'Oranges' 
), 0), 12); 
+0

我不知道'COALESCE()',謝謝!對不起,我的問題不清楚:( – 2012-04-19 20:54:03