mysql - 仅根据非唯一参数更新查询中的单行?

标签 mysql sql

我有一个包含重复键的大表,我正在尝试将其连接到具有唯一键的较小表。我知道事实上并不存在所有的匹配。我只想从较小的表中进行匹配来更新较大表中的一行,然后移动到下一个较小的表行以进行下一次更新。我需要这样,因为我试图在更大的表中创建唯一的 id,因为每一行代表一个现实世界的产品,它有自己的现实世界对象的层次结构。

例如,

bigtable
barcodeSnippet        t_stamp       workId       parentCase    newId
aaaa                  time1         1            1             NULL
aaaa                  time1         1            1             NULL
aaaa                  time1         1            1             NULL

我的小 table 可能有这个

smalltable
id   barcodeSnippet      t_stamp      workId      parentCase
1    aaaa                time1        1           1
2    aaaa                time1        1           1

我想要的 bigtable 的最终结果是

bigtable
barcodeSnippet        t_stamp       workId       parentCase    newId
aaaa                  time1         1            1             1
aaaa                  time1         1            1             2
aaaa                  time1         1            1             NULL

每行只处理一次,并且由于大表中有 3 行而小表中有两个匹配项,所以留下了 NULL。

我当前的查询

UPDATE bigtable as bt
JOIN smallTable as st ON (bt.barcodeSnippet = b.barcodeSnippet AND 
bt.parentCase= st.parentCase and bt.t_stamp = st.t_stamp and bt.workId = 
st.workId)
SET bt.bottlesId = st.id;

不起作用,而且我不认为可以在 MySQL 的 UPDATE 中使用 LIMIT。我在 MS SQL 中看到了其他答案,您可以使用 TOP 1,也许 newId IS NULL,但我在这里再次使用 MySQL。

我想我可能需要使用存储过程/游标方法,但即使如此,我似乎也会遇到必须运行更新语句的问题,然后我又回到了第 1 方。

有什么想法吗?使用MySQL 5.6。

编辑:认为我有一个不错的解决方案。我刚刚更新了我的查询,所以我确实有重复项。但是,现在我添加了行号列。我计划将表本身加入并在行号 < 行号时更新它,因此我保留顶部 ID 并可以将其他 ID 变为 null,这是合适的。

类似这样的

UPDATE bigtable tb
JOIN bigtable tb2 ON tb.newId = tb2.newId
SET tb.newId = NULL
WHERE tb.rowNumber < tb2.rowNumber;

最佳答案

您将 auto_incremented id 列与超全局 $_GET 一起使用:

1.php <?php $var = $row["id"]; ?> <a href="2.php?id=<?php echo $var; ?>">Something</a>

然后在你的2.php中

<?php $id = $_GET["id"]; $sql = "SELECT * FROM table WHERE id='$id';"; 当然你需要使用准备好的语句

关于mysql - 仅根据非唯一参数更新查询中的单行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54867298/

相关文章:

mysql - JOIN 在 sql 中的 id 数组

mysql - 如何获取多行上的最新日期和最早日期之间的列差异

php - 将字符串日期转换为 MySQL 日期时间

php - 将此字符串转换为日期格式以保存到 mysql

php - 阵列运行不正常

mysql - 从 hbs 到 MySQL Express js 的多次插入

Mysql根据相同的值对多个列进行计数

sql - 为什么 Postgres 执行计划会根据 where 条件发生巨大变化

java - 将 Java 类连接到 Derby 数据库可提高池连接的性能

php - 来自 PHP 的 MySQL 查询返回不正确的结果