【问题标题】:SQL query using replace a value in one table by randomly selecting a value in another table通过随机选择另一个表中的值来替换一个表中的值的 SQL 查询
【发布时间】:2012-11-20 20:39:01
【问题描述】:

我有一个表,我希望使用 cron 作业定期更新它的值。但是,我需要通过将其替换为不同表中的值来更新该值。问题是我希望随机选择替换值。

例如表1有

ID    Email
=================
1     bobatumail

表2有:

ID    Email
================
1     bobatumail
2     joeatumail
3     peteatumail
4     biffatumail
5     wilneratumail
6     wilsonatumail

我希望查询将表 1 中的 bobatumail 替换为表 2 中的任何其他值,只要它是随机的。它甚至可能与表 1 中的值相同。

知道怎么做吗?

【问题讨论】:

  • 为什么你有两个结构相同的表?大局是什么?你想在这里实现什么目标?
  • 结构不相同。为了简单起见,我只是对其进行了删节... 表 1 中的用户获得了特殊的好处,并且我希望表 2 中的其他用户随着时间的推移有机会获得相同的好处。他们只有放在表1中才能获得好处。表1是一个单行表。
  • 随机值是否总是从表 2 的同一列中选取?
  • 听起来你应该只在表 2 (int 0\1) "special_benefit" 中有一列而不是 2 个表。
  • @Onite,是的。 @ Dagon,我无法做出改变,但我理解你的意思......我之前写错了,表 1 有很多行,它必须保持原位......

标签: php sql random


【解决方案1】:

在 MySQL 中,您可以使用 REPLACE 语句:

REPLACE INTO table1 (ID, Email)
SELECT 1, table2.Email FROM table2 ORDER BY RAND() LIMIT 1;

第二行中的“1”代表条目的id,而第二部分从table2中返回一个随机值。是的,有使用 UPDATE 语句(JOIN 和 ANSI)的解决方案,但它总是很棘手,您通常必须关闭安全更新模式。

http://dev.mysql.com/doc/refman/5.5/en/mysql-command-options.html#option_mysql_safe-updates

请注意,REPLACE 首先删除旧条目,然后重新插入新条目。

http://dev.mysql.com/doc/refman/5.5/en/replace.html

【讨论】:

  • 选择1是表1中的条目的ID吗?我使用了语法,但在字段列表中收到未知列错误(对于语法的 Select 1 部分)...
  • 可能是列名拼写错误:将“id”替换为“ID”,将“email”替换为“Email”。我在声明中更正了。
  • 是的,1是table1中条目的ID。
  • 在我的示例中,为了简单起见,我省略了一些列标题是否重要。例如,表 1 中的真实标题是 (settingid,name,value,accountid),其中 value 是“email”,设置 ID 是“ID”......我有列和行名称的确切名称,但不断得到一个错误。它实际上是说 Select 1 是列错误而不是行
  • 好的,你用的是哪个数据库?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多