Mysql 使用同一个表的数据,在自己的WHERE语句中使用SELECT语句中的表数据

Mysql 使用同一个表的数据,在自己的WHERE语句中使用SELECT语句中的表数据,mysql,sql,Mysql,Sql,对不起,标题很混乱。可悲的是,文本更令人困惑 基本上,我有一个SQL脚本,可以将数据从一个表导入到另一个表,我试图忽略某些行 第一个表记录每个“事件”三行,我只需要其中一行。我想忽略的事件是两个几乎重复的事件,但其中一列是0而不是1,时间也可能不同。我给它20秒的时间限制,让它保持匹配 这就是我到目前为止所做的: INSERT INTO prism_actions (action_time, action_type, player, world, x, y, z, data) SELECT

对不起,标题很混乱。可悲的是,文本更令人困惑

基本上,我有一个SQL脚本,可以将数据从一个表导入到另一个表,我试图忽略某些行

第一个表记录每个“事件”三行,我只需要其中一行。我想忽略的事件是两个几乎重复的事件,但其中一列是0而不是1,时间也可能不同。我给它20秒的时间限制,让它保持匹配

这就是我到目前为止所做的:

INSERT INTO prism_actions (action_time, action_type, player, world, x, y, z, data)
  SELECT FROM_UNIXTIME(`co_blocks`.time), 
    'block-shift', 
    'Piston', 
    CASE WHEN `co_blocks`.wid = 1 THEN 'world' ELSE (CASE WHEN `co_blocks`.wid = 2 THEN 'world_nether' ELSE 'world_the_end' END) END, 
    SUBSTRING_INDEX( `co_blocks`.bcords , '.', 1 ), -- This will get the X coordinate of this action
    SUBSTRING_INDEX(SUBSTRING_INDEX( `co_blocks`.bcords , '.', 2 ),'.', -1), -- Y coordinate
    SUBSTRING_INDEX(SUBSTRING_INDEX( `co_blocks`.bcords , '.', 3 ),'.', -1), -- Z
    CONCAT("{\"block_id\":", `co_blocks`.type, ",\"block_data\":", `co_blocks`.data, "}")
  FROM `co_blocks`
  WHERE `co_blocks`.user LIKE '#piston' 
    AND `co_blocks`.action = 1 
    AND NOT (EXISTS(
      SELECT `id` FROM `co_blocks` WHERE user LIKE '#piston' AND action = 0 AND time < (`co_blocks`.time + 20) AND time > (`co_blocks`.time - 20) AND `co_blocks`.bcords LIKE bcords))
  ORDER BY id ASC;
它使用相同的表名。如何使用第一个SELECT的数据签入第二个SELECT中的WHERE

编辑: 以下是我开始时的一些示例数据:

+------+------+------+------------+---------+------------+------+------+--------+------+------+
| id   | cx   | cz   | time       | user    | bcords     | type | data | action | rb   | wid  |
+------+------+------+------------+---------+------------+------+------+--------+------+------+
| 2147 |   22 |   17 | 1361130494 | #piston | 359.67.276 |    3 |    0 |      1 |    0 |    1 |
| 2148 |   22 |   17 | 1361130494 | #piston | 359.67.276 |    3 |    0 |      0 |    0 |    1 |
| 2149 |   22 |   17 | 1361130494 | #piston | 358.67.276 |    3 |    0 |      1 |    0 |    1 |
我只想从最后一行导入数据,因为bcords不同,action=1

编辑2:

我应该在这方面提供更多的背景。我试着从一个表、co_块中获取数据,然后将其放入另一个表、prism_actions中。使用prism_操作的程序对此操作仅使用一行,而使用co_块的程序使用3行。我只是想从co_块中得到正确的动作,并把它放到prism_动作中

编辑3:

这是另一个我有问题的例子,希望它能让我更容易理解。在我的表中有一些值,我想有两个语句,它们将每个表中的信息相互比较

UPDATE co_pistons
    SET x = (SELECT SUBSTRING_INDEX( bcords , '.', 1 ) FROM `co_pistons` WHERE 
    `co_pistons`.bcords LIKE bcords
    LIMIT 1)
    WHERE NOT isFrom;
在第3行,co_活塞.bcords和bcords指的是同一事物。我想让co_活塞.bcords引用更新的bcords,这样我就可以比较它们了。

为此,我创建了一个单独的表,并添加了我需要使用的所有数据。然后,我可以将子查询中的表数据与主查询的数据进行比较。我不确定这是否太有效,但对于我的脚本来说,它对我来说很好,因为脚本只运行一次。如果有人有更好的想法,那就太好了,但除此之外,这对我很有用

UPDATE co_pistons
    SET x = (SELECT SUBSTRING_INDEX( bcords , '.', 1 ) FROM `co_pistons` WHERE 
    `co_pistons`.bcords LIKE bcords
    LIMIT 1)
    WHERE NOT isFrom;
编辑

我的问题实际上是我不知道如何使用AS来给表命名。这导致我在查询中使用了两个同名的表,这让我很困惑。解决方案是使用昵称命名表:

FROM `co_blocks` as c1
...
SELECT `co_blocks` as c2 WHERE c1.bcords = c2.bcords

我想前面的解决方案是可行的,但它肯定不是最好的解决方法。

请更具体地说明您使用的是哪种数据库。您能给我们一个数据图表和所需结果图表吗?如果我正确理解您的问题,子查询中的时间将仅用于子查询。在prism_操作中插入的时间将来自您的主查询。如果我使用MySQL,它看起来会说:服务器版本:5.1.66connect@Luke101好的,我已经用我开始的数据编辑了我的问题。