![](/img/trans.png)
[英]MySQL Inner Join two tables and insert row from one table to other on matching row field
[英]mysql insert from two tables into one using inner join and max()
我檢查了建議的帖子,但找不到答案。 我正在制作具有多對多關系和三個MySQL表的CRUD應用程序。 一個表稱為“ pm”:
CREATE TABLE `pm` (
`pm_id` int(11) NOT NULL AUTO_INCREMENT,
`pm_name` varchar(45) NOT NULL,
`pm_address` varchar(45) DEFAULT NULL,
`valid_through` int(11) NOT NULL,
PRIMARY KEY (`pm_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
+-------+---------+------------------------+---------------+ | pm_id | pm_name | pm_address | valid_through | +-------+---------+------------------------+---------------+ | 1 | Alpha | http://www.alpha.com | 190303 | | 2 | Bravo | http://www.bravo.com | 200506 | | 3 | Charlie | http://www.charlie.com | 190708 | | 4 | Delta | http://www.delta.com | 210509 | | 5 | Echo | http://www.echo.com | 230416 | | 6 | Foxtrot | http://www.foxtrot.com | 181011 | +-------+---------+------------------------+---------------+
另一個稱為“搜索詞”:
CREATE TABLE `searchwords` (
`searchword_id` int(11) NOT NULL AUTO_INCREMENT,
`searchword` varchar(45) NOT NULL,
PRIMARY KEY (`searchword_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
+---------------+------------+ | searchword_id | searchword | +---------------+------------+ | 1 | apples | | 2 | oranges | | 3 | pears | | 4 | bananas | | 5 | grapes | +---------------+------------+
第三個是join_table:
CREATE TABLE `join_table` (
`id_join_table` int(11) NOT NULL AUTO_INCREMENT,
`pm_id` int(11) DEFAULT NULL,
`searchword_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id_join_table`),
KEY `FK1_idx` (`pm_id`),
KEY `FK2_idx` (`searchword_id`),
CONSTRAINT `FK1` FOREIGN KEY (`pm_id`) REFERENCES `pm` (`pm_id`) ON DELETE
NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `FK2` FOREIGN KEY (`searchword_id`) REFERENCES `searchwords`
(`searchword_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
+---------------+-------+---------------+ | id_join_table | pm_id | searchword_id | +---------------+-------+---------------+ | 8 | 6 | NULL | | 9 | 6 | NULL | | 10 | 6 | NULL | +---------------+-------+---------------+
下面是我現在擁有的SQL。 例如,在結尾處有“橙色”,我想-進入“ join_table”的新行中-將最大pm_id從“ pm”放入pm_id列,並將對應於橘子的searchword_id從“ searchwords”放入searchword_id列。
INSERT INTO join_table (pm_id, searchword_id)
SELECT (SELECT MAX(pm_id) FROM pm), (SELECT DISTINCT
searchwords.searchword_id FROM searchwords
INNER JOIN join_table ON
searchwords.searchword_id = join_table.searchword_id
WHERE searchword = "oranges");
該SQL有時魔術般地起作用,但通常沒有(這種不一致怎么可能?)。 pm_id值始終位於該位置,因此我傾向於使用正確的值作為pm_id並將searchword設置為NULL的行,如上所示。 幫助將不勝感激!
實際上,我只是使用以下方法解決了問題:
INSERT INTO join_table (pm_id, searchword_id)
SELECT MAX(pm_id), searchword_id
FROM pm, searchwords
WHERE searchword="bananas"
內連接仍然如此,2017年對不對?
但是現在我在嘗試刪除帖子並遇到錯誤時遇到問題:
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint
violation: 1451 Cannot delete or update a parent row: a foreign key
constraint fails (`database`.`join_table`, CONSTRAINT `FK1`
FOREIGN KEY (`pm_id`) REFERENCES `pm` (`pm_id`)
嘆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.