MySQL 5.5.24-log 更新查询连接

标签 mysql

在数据库MySQL版本5.5.24-log中,我有两个表tbl_t1 tbl_t2

这些表有共同的关键区域

这是如此,因为如果尝试此连接查询,输出是正确的:

mysql> SELECT
    areat2,
    areat1,
    nameareat1,
    monthareat2
FROM
    tbl_t1 t1
JOIN tbl_t2 t2 ON t1.areat1 = t2.areat2
WHERE
    monthareat2 = '2014-08'
GROUP BY
    t1.areat1
ORDER BY
    t1.nameareat1 ASC;
+--------+--------+-----------------------+-------------+
| areat2 | areat1 | nameareat1            | monthareat2 |
+--------+--------+-----------------------+-------------+
| XX4M   | XX4M   | AREA AAAAAA           | 2014-08     |
| XX5M   | XX5M   | AREA BBBBBB           | 2014-08     |
| XX4N   | XX4N   | AREA CCCCCC           | 2014-08     |
| XX1M   | XX1M   | AREA DDDDDD           | 2014-08     |
+--------+--------+-----------------------+-------------+
4 rows in set

现在,当存在两个表的键区域时,我需要更新表tbl_t1中的字段valid .

我尝试过这个解决方案,但出现错误。

UPDATE tbl_t1 t1
JOIN (
    SELECT
    areat2,
    areat1,
    nameareat1,
    monthareat2
    FROM
        tbl_t1 t1
    JOIN tbl_t2 t2 ON t1.areat1 = t2.areat2
    WHERE
        monthareat2 = '2014-08'
    GROUP BY
        t1.areat1
) AS t2 ON t1.areat1 = t2.areat2
SET t1.valid = 1;

[Err] 1060 - Duplicate column name 'areat1'

你能解释一下这是怎么做的吗?

提前谢谢您。

最佳答案

在内部和外部查询中使用不同的别名:

UPDATE tbl_t1 t3
JOIN (
    SELECT
    areat2,
    areat1,
    nameareat1,
    monthareat2
    FROM
        tbl_t1 t1
    JOIN tbl_t2 t2 ON t1.areat1 = t2.areat2
    WHERE
        monthareat2 = '2014-08'
    GROUP BY
        t1.areat1
) AS t4 ON t3.areat1 = t4.areat2
SET t3.valid = 1;

关于MySQL 5.5.24-log 更新查询连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158012/

相关文章:

php - Mysql 语句以特定顺序从数据库中提取信息并包含子集

javascript - php/mysql 搜索结果 - 当类型 >1 时过滤结果,同时保留其他类型不 >1 的结果 - codeigniter

php - mysqli 使用 foreach 从多个复选框插入数据库

java - 如何从Java匿名访问MySQL数据库

php - MySQL SELECT X(location) 返回意外的数字/格式

MySQL查询从不同的表和组数据中进行选择

c# - 与 Entity Framework 和 MySQL 的乐观并发

php - 如何修复: Error- No database selected

mysql - 具有一个空字段的 UNIQUE KEY

mysql - 打开包含 Blob 的脚本时出现文件编码问题