gpt4 book ai didi

mysql - 从具有不同搜索结果的表中提取数据

转载 作者:行者123 更新时间:2023-11-29 05:59:03 26 4
gpt4 key购买 nike

我正在尝试从包含先前搜索结果的表中提取数据。我对数据库查询不是很熟悉,并且做了一个会因占用过多内存而使我的计算机崩溃的查询。

此数据来自电路板测试仪,我需要某些信息。

  1. 在给定时间段内运行了多少板
  2. 失败了多少
  3. 这些板的所有故障数据编辑:这是我需要弄清楚的数据。请参阅底部的编辑。

第一次运行板时,它会在板表中创建一条记录

+----------+-------+-----+
| Board_id | Board | rev |
+----------+-------+-----+
| 1 | 1234 | 1 |
| 2 | 1234 | 1 |
| 3 | 1235 | 2 |
| 4 | 5869 | 15 |
+----------+-------+-----+

板子每次运行时都会创建一条测试记录

+----------+----------+---------+---------------------+
| Test_id | Board_id | Operator| Date_Time |
+----------+----------+---------+---------------------+
| 34 | 1 | 1 | 2017-08-02 09:13:34 |
| 35 | 1 | 1 | 2017-08-02 09:13:36 |
| 36 | 1 | 1 | 2017-08-02 09:13:39 |
| 37 | 2 | 1 | 2017-08-02 09:14:10 |
| 38 | 3 | 1 | 2017-08-02 09:16:24 |
| 39 | 3 | 2 | 2017-08-03 10:40:45 |
| 40 | 4 | 2 | 2017-08-03 10:43:34 |
+----------+----------+---------+---------------------+

...结果存储在Results中

+-----------+---------+--------+-------------+-------------+
| Result_id | Test_id | Result | Upper_Limit | Lower_Limit |
+-----------+---------+----------------------+-------------+
| 40 | 34 | 2 | 4 | 1 |
| 41 | 34 | 3 | 4 | 1 |
| 42 | 34 | 4 | 4 | 1 |
| 43 | 34 | 0 | 4 | 1 |
| 44 | 35 | 2 | 4 | 1 |
| 45 | 35 | 3 | 4 | 1 |
| 46 | 35 | 4 | 4 | 1 |
| 47 | 35 | 0 | 4 | 1 |
| 48 | 36 | 2 | 4 | 1 |
| 49 | 36 | 3 | 4 | 1 |
| 50 | 36 | 4 | 4 | 1 |
| 51 | 36 | 2 | 4 | 1 |
| 52 | 37 | 2 | 4 | 1 |
| 53 | 37 | 3 | 4 | 1 |
| 54 | 37 | 4 | 4 | 1 |
| 55 | 37 | 2 | 4 | 1 |
| 56 | 38 | 2 | 4 | 1 |
| 57 | 38 | 3 | 4 | 1 |
| 58 | 38 | 4 | 4 | 1 |
| 59 | 38 | 5 | 4 | 1 |
| 60 | 39 | 2 | 4 | 1 |
| 61 | 39 | 3 | 4 | 1 |
| 62 | 39 | 4 | 4 | 1 |
| 63 | 39 | 5 | 4 | 1 |
| 64 | 40 | 2 | 4 | 1 |
| 65 | 40 | 3 | 4 | 1 |
| 66 | 40 | 4 | 4 | 1 |
| 67 | 40 | 3 | 4 | 1 |
+-----------+---------+--------+-------------+-------------+

为了获取在我查询的给定时间段内运行的板数和 Board_ID。

SELECT a.Board_ID  FROM    
Tests a, Results b
WHERE a.Date_Time>='2017-08-02' AND a.Date_Time<'2017-08-03' and
a.Test_ID = b.Test_ID
group by a.Board_ID

获取所有与我查询的 Board_ID 相关的测试。

SELECT *  from 
Tests x, (
SELECT a.Board_ID FROM
Tests a, Results b
WHERE a.Date_Time>='2017-08-02' AND a.Date_Time<'2017-08-03' and
a.Test_ID = b.Test_ID
group by a.Board_ID
) y
where x.Board_ID = y.Board_ID

这给了我正确的结果,但查询似乎关闭了,但是当我尝试从上面的查询中获取失败的结果时,我遇到了最多的麻烦。

SELECT d.Test_ID  FROM 
Boards a, Tests b, (
SELECT x.Test_ID, x.Board_ID, x.Operator, x.Date_Time from
Tests x, (
SELECT a.Board_ID FROM
Tests a, Results b
WHERE a.Date_Time>='2017-08-02' AND a.Date_Time<'2017-08-03' and
a.Test_ID = b.Test_ID
group by a.Board_ID
) y
)d
WHERE d.Test_ID = b.Test_ID and
b.Result not between Lower_Limit and Upper_Limit

编辑:

如果您查看我创建的测试表,您会发现 board_id 3 在两个不同的日子进行了两次测试。我需要查看我们在某一天运行的看板,例如 2017-08-02,以及与这些看板相关的所有记录。因此,由于 Board_ID #3 运行了 2 天,并且在有问题的那一天运行,我需要在我的查询中包含该记录。

我的解决方案

SELECT * FROM 
(
SELECT x.Test_ID, x.Board_ID, x.Operator, x.Date_Time from
Test x, (
SELECT a.Board_ID FROM
Test a
join Results b on a.Test_ID = b.Test_ID
WHERE a.Date_Time>='2017-08-11' AND a.Date_Time<'2017-08-12'
group by a.Board_ID
) y
where x.Board_ID = y.Board_ID
)d
join Boards a on a.Board_ID = d.Board_ID
join Results b on b.Test_ID = d.Test_ID
join Test_Names c on c.Test_Name_ID = b.Test_Name_ID --Table Not shown
WHERE
b.result not between Lower_Limit and Upper_Limit

从这里您可以看到我有 3 个嵌套搜索到 1 个。通过 3 个单独的搜索,我获得了解析所需信息所需的所有数据。接下来将找到一种方法来查询数据库而不是解析。

最佳答案

我觉得你想多了。您不需要所有内联 View 。下面是我将如何使用 ANSI 连接编写它(就像评论中建议的@CptMisery)

SELECT d.test_id, b.board, b.board_rev, r.result_id, r.result -- and whatever else you need.  
from tests t
join results r on t.test_id = r.test_id
join boards b on t.board_id = b.board_id
where t.Date_Time>='2017-08-02' AND t.Date_Time<'2017-08-03'
and r.result >Lower_Limit -- or >=
and r.result < Upper_Limit -- or <=, if it can be the limit value

根据表的关系(外键到主键)连接所有表,在 where 子句中选择过滤器,然后选择要使用 Select“转换”的列。

关于mysql - 从具有不同搜索结果的表中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com