我正在尝试使用嵌套选择参数化以下插入。
INSERT IGNORE INTO table1 (creation_timestamp, str1, str2)
(SELECT now(), "param1", str2 FROM table2 WHERE key = "param2");
我想要像
这样的东西INSERT IGNORE INTO table1 (creation_timestamp, str1, str2)
(SELECT now(), ?, str2 FROM table2 WHERE key = ?)
VALUES ("param1", "param2");
任何人都知道如何才能完成这样的事情?
答案 0 :(得分:2)
不完全相同,但非常相似。
您可以使用预备语句: http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
示例:强>
PREPARE soExample
FROM 'INSERT
INTO usr (id, username, profile_pic)
VALUES (NULL, ?, (SELECT name
FROM customers
WHERE id = ?
LIMIT 1))';
SET @uname = "someUserNameForTheExample";
SET @id = "1";
EXECUTE soExample USING @uname, @id;
或者你也可以使用程序或/和函数
<强>功能强>
DROP FUNCTION IF EXISTS insertExample$$
CREATE FUNCTION insertExample(userNameVar VARCHAR(255), uID INT(11)) RETURNS BOOLEAN
BEGIN
INSERT
INTO usr (id, username, profile_pic)
VALUES (NULL, userNameVar, (SELECT name
FROM customers
WHERE id = uID
LIMIT 1));
IF ROW_COUNT() > 0 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END$$
功能使用
SELECT insertExample("SomeUsername" 2);
答案 1 :(得分:0)
也许你应该先阅读https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html。由于Mysql函数为预构建查询启用了参数化输入。