【问题标题】:Mysql delete rows with local var working partiallyMysql删除本地var部分工作的行
【发布时间】:2016-03-23 21:48:59
【问题描述】:

我有三个表:utenti、giocate 和 giocatori。

我必须删除 giocatori 和 giocate 表中具有特定 ID 的行。

我通过这种方式获取 id:

SELECT
    @ids:=giocate.id
  FROM
    giocate
  JOIN
    utenti ON utenti.id = giocate.id_account
  WHERE
    utenti.id = 642 AND DATE_FORMAT(giocate.time,
    '%Y-%m-%d') = '2016-03-20';

这确实有效,实际上是一个

SELECT @ids;

给我

ids
-------
1225
4545
5454
6653
...

但是当我调用这个查询时:

DELETE giocate.*, giocatori.*
FROM
  giocatori
INNER JOIN
  giocate
WHERE
  giocate.id_giocatore = giocatori.id AND giocate.id IN (@ids)

我在每张表中只被删除了一行... 所以我必须对“count(@ids)”重复该查询...... 为什么会这样?

【问题讨论】:

  • IN 的每个值都需要一个参数,例如,您不能使用单个参数并传入逗号分隔的列表。
  • 为什么要使用变量来执行此操作?有原因吗?
  • @BerndBuffen 是的,因为如果我从中删除行,mysql 不允许我执行嵌套查询(giocate 表在删除和选择语句中)
  • @JoachimIsaksson 我正在传递一组值,我认为...不是吗?
  • @Francesco 如果我需要保存查询结果,我会使用临时表。

标签: jquery mysql sql sql-delete


【解决方案1】:

好吧。你不需要变量。这可能就足够了:

DELETE ge, gi
FROM giocatori gi INNER JOIN
     giocate ge
     ON gi.id_giocatore = ge.id 
WHERE ge.id_account = 642
       date(ge.time) = '2016-03-20';

这似乎抓住了你的逻辑意图。但是,如果您的数据结构可能,它可能会丢失其他日期的 giocate 记录。

【讨论】:

  • 是的,这是一个更智能的查询,但我仍然没有抓住重点,为什么我的查询只删除一行? (我希望它会删除 @ids 变量中的所有行...)
  • @Francesco MySQL 没有数组,一个变量一次只能保存一个值。我无法重现您在问题中描述的 select @ids; 行为。
  • SELECT @variable := column FROM ... 为您提供与查询找到的行一样多的输出行,但变量的值 随每一行而变化 并且在查询完成后,该变量设置为分配的 last(标量)值,这很可能是返回的最后一行的值,尽管这在技术上不是确定性的。
  • @Francesco 。 . .因为giocate.id IN (@ids) 只包含IN 列表中的一个 项——一个带有一堆逗号的字符串。但是,MySQL 将该值转换为整数,这实质上是从列表中剥离第一个值以进行比较。
猜你喜欢
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多