我是MySQL的新手。我有两个相关的表格,很常见的情况:Klients(KID,姓名,姓氏)和Visits(VID,VKID,dateOfVisit) - VKID是Klient ID。我有一个合适的INSERT查询的问题,这是我想要做的: 1.检查是否存在具有特定名称和姓氏的Klient(让我们假设没有人具有相同的姓氏) 2.如果是,得到ID并执行INSERT访问表 3.如果否,则插入新的Klient,将ID和INSERT访问到访问。复杂INSERT查询
是否可以在一个查询中执行?
我是MySQL的新手。我有两个相关的表格,很常见的情况:Klients(KID,姓名,姓氏)和Visits(VID,VKID,dateOfVisit) - VKID是Klient ID。我有一个合适的INSERT查询的问题,这是我想要做的: 1.检查是否存在具有特定名称和姓氏的Klient(让我们假设没有人具有相同的姓氏) 2.如果是,得到ID并执行INSERT访问表 3.如果否,则插入新的Klient,将ID和INSERT访问到访问。复杂INSERT查询
是否可以在一个查询中执行?
您需要使用IF EXIST/NOT EXISTS并使用子查询来检查表。见bwlo
http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
HTH
这不给予解决 – Skrol29 2012-03-17 20:40:02
INSERT语句只允许一个单一的目标表中的参考。
因此,除非使用触发器或存储过程,否则查找的查询是不可能的。
但是,这种问题是使用休耕小算法通常解决:
1)插入在表中的记录[访问]假定父记录并在表中存在[Klients]
INSERT INTO Visits (VKID, dateOfVisit)
SELECT KID, NOW()
FROM Klients
WHERE ([email protected]) AND ([email protected])
2)查询后查询插入的记录数(1)
3)如果没有记录被插入,则添加一个新的记录表[Klients],然后再次运行(1)。
尝试这样的事情
IF (SELECT * FROM `sometable` WHERE name = 'somename' AND surname = 'somesurname') IS NULL THEN
INSERT INTO Table1(name,surname) VALUES ('somename', 'somesurname');
ELSE INSERT INTO visits(kid,name,surname)
SELECT kid, name, surname FROM Table1 WHERE name = 'somename' AND surname = 'somesurname';
END IF;
没有需要指定
我没有测试过二次插入“价值”,但这是你正在尝试的总体思路完成。
它看起来像它适合我的需要,由我收到1064错误[上一页] [代码] IF NOT EXISTS(SELECT * FROM'Klients' WHERE'surname' ='史密斯)THEN INSERT INTO'Klients'('name','surname')VALUES( '亚当', '史密斯'); ELSE INSERT INTO'Visits'('VKID') SELECT'KID' FROM'Klients' WHERE'surname' = '史密斯'; END IF; [/代码] [/预] – user1091733 2012-03-17 22:14:59
对不起,但我无法弄清楚如何在我的注释格式的代码,这是一个有点乱 – user1091733 2012-03-17 22:22:13
这些应该是事务的两个查询:
INSERT INTO Klients (name, surname)
VALUES ('John', 'Doe')
ON DUPLICATE KEY UPDATE
KID = LAST_INSERT_ID(KID);
INSERT INTO Visits (VKID, dateOfVisits)
VALUES (LAST_INSERT_ID(), NOW());
第一条语句是在更新部分使用并不广为人知的UPSERT声明,但对于LAST_INSERT_ID的目的,功能完全相同intented(),其中明确通过的值被存储用于获取之后的值。
UPD:我忘记提及您需要添加一个唯一的约束(姓,名)。
听起来不像一个查询。 – Randy 2012-03-17 20:30:34
也许交易? – user1091733 2012-03-17 20:32:08
有一个相关的问题,也许这可能有帮助 http://stackoverflow.com/questions/4940283/conditional-mysql-statement-if-true-update-if-false-insert – gastonfartek 2012-03-17 20:47:37