【问题标题】:How can I combine these SQL queries to be more efficient for MySQL?如何组合这些 SQL 查询以提高 MySQL 的效率?
【发布时间】:2013-01-11 19:54:11
【问题描述】:

我想将以下查询合并为一两个更大的查询:

SELECT user, password, email FROM users WHERE user = 'njp316' LIMIT 1;

INSERT IGNORE INTO collectors_users (username, password, email, dateadded, subscribed)
VALUES (user, password, email, NOW(), 'Y');

这个会拉回多行,所以需要循环:

SELECT barcode FROM collections WHERE user = user;

INSERT IGNORE INTO collections_collections (username, barcode)
VALUES (user, barcode);

显然我对 SQL 不熟悉,所以只是寻求一些帮助。谢谢。

【问题讨论】:

  • 我猜你必须编写一个存储过程。我认为您无法以其他方式做到这一点,但我会等待一些真正的专家加入。
  • 客户端代码是什么? IE。 Java,c++等
  • 客户端代码为 PHP

标签: mysql sql performance insert


【解决方案1】:

除非我遗漏了什么……这很简单:

INSERT IGNORE INTO collectors_users
(username, password, email, dateadded, subscribed)
SELECT user, password, email, NOW(), 'Y'
FROM users 
WHERE user = 'njp316' 
LIMIT 1;

INSERT IGNORE INTO collections_collections 
(username, barcode)
SELECT user, barcode 
FROM collections 
WHERE user = user;

【讨论】:

  • WHERE 用户 = 用户; - 我希望从这里的第一个查询中以某种方式获取用户名。
【解决方案2】:

您可以使用子选择。

INSERT INTO collectors_users (username, password, email, dateadded, subscribed)
SELECT user, password, email, NOW(), 'Y' FROM users WHERE user='njp316' LIMIT 1;

它使用 SELECT 作为数据源来注入 INSERT。请注意,列的顺序很重要。

【讨论】:

  • 那不是只插入一条记录吗?
  • 是的,只会插入一条记录。如果您不想限制,请删除LIMIT
【解决方案3】:

试试这个:

INSERT IGNORE INTO collectors_users (username, `password`, email, dateadded, subscribed) 
SELECT `user`, `password`, email, NOW(), 'Y' 
FROM users WHERE `user` = 'njp316' LIMIT 1;

INSERT IGNORE INTO collections_collections (username, barcode) 
SELECT `user`,barcode 
FROM collections WHERE `user` = 'njp316';

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多