首先,您應該而不是試圖通過調用MAX(dvd_price_id) + 1
來檢索下一個插入ID。這對於競爭條件並不是免疫的,並且可能會導致問題,因爲它不可靠。如果您的dvd_price_id
已經沒有AUTO_INCREMENT
,建議您添加一個,然後讓RDBMS爲您處理增量。
ALTER TABLE dvd_price MODIFY dvd_price_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
現在,您不必擔心dvd_price_id
在INSERT
可言。要獲得1-day, 2-day, 3-day
的所有三個值,您可以通過連接這些靜態值列表來創建笛卡爾產品。這將導致表中當前每一行的每一天的每個值。
INSERT INTO dvd_price (dvd_id, rental_amount, time_rented_for)
SELECT
dvd_id,
2 AS rental_amount,
rental_period
FROM
dvd
/* join a subquery which creates a list of 'N-day' strings using
SELECT 'value' UNION SELECT 'value'.....
With no ON clause, it will do this for every row in `dvd`
*/
CROSS JOIN (
SELECT '1-day' AS rental_period
UNION SELECT '2-day' AS rental_period
UNION SELECT '3-day' AS rental_period
) rental_periods
測試此第一隻使用查詢的SELECT
部分,而不INSERT
。
這裏是它如何工作的示範:http://sqlfiddle.com/#!2/a0862/1
你們是不是要得到相同的'dvd_price_id'淡水河谷所有三個,或增加它爲每一個? –
每增加一個。 –
並且'dvd_price_id'是表的主鍵? –