我想知道如何制作这段代码:如果不是空插入表,否则覆盖行:
$affectedRows = $pdo->exec(
"insert into table_1 (name, money, month, year)
select name, count(*), MONTH(STR_TO_DATE(data, '%d/%m/%Y')),
YEAR(STR_TO_DATE(data, '%d/%m/%Y'))
from table_2
group by name");
由于
答案 0 :(得分:0)
使用以下查询:
INSERT INTO table_1 (name, money, month, year)
SELECT t.name, t.money, t.month, t.year
FROM
(
SELECT name,
COUNT(*) AS money
MAX(MONTH(STR_TO_DATE(data, '%d/%m/%Y'))) AS month,
MAX(YEAR(STR_TO_DATE(data, '%d/%m/%Y'))) AS year
FROM table_2
GROUP BY name
) t
ON DUPLICATE KEY UPDATE name=t.name, money=t.money, month=t.month, year=t.year
请注意,我将MONTH()
和YEAR()
的调用与MAX()
(一个聚合函数)包装在一起,因为在使用GROUP BY
时选择非聚合列是不正确的。如果您向我们展示table_2
的实际数据,那么可能会对此进行改进。
<强>更新强>
请注意,其结果集用于上面插入的子查询永远不会生成重复记录,因为每个组只能有一条记录。因此,为了测试这个答案,您必须在table_1
中有一些数据可以被子查询复制。