gpt4 book ai didi

mysql - 使用MySQL从一行中的两个表中检索数据

转载 作者:行者123 更新时间:2023-11-28 23:52:49 24 4
gpt4 key购买 nike

我试图从两个表中获取日期,但问题是它们为单个 ID 返回多行。我有这样的表:-

Transaction
-----------
tid|startdate|enddate|status
100|2-9-2015|2-9-2015|success
200|1-9-2015|1-9-2015|failed
300|31-8-2015|31-8-2015|success

Test_Details
------------
id|tid|test_name|test_status
1|100|Test1|yes
2|100|Tes2|no
3|100|Test3|yes
4|200|Test1|no
5|200|Tes2|no
6|200|Test3|yes
7|300|Test1|yes
8|300|Tes2|no
9|300|Test3|no

期望的结果:-

tid|startdate|enddate|status|Test1|Test2|Test3
100|2-9-2015|2-9-2015|success|yes|no|yes
200|1-9-2015|1-9-2015|failed|no|no|yes
300|31-8-2015|31-8-2015|success|yes|no|no

我正在使用这个查询:-

select distinct ts.tid as tid, ts.startdate as startdate,
ts.enddate as enddate, ts.status as status,
CASE WHEN (td.test_name='Test1') THEN test_status END as Test1,
CASE WHEN (td.test_name='Test2') THEN test_status END as Test2,
CASE WHEN (td.test_name='Test3') THEN test_status END as Test3
from transation ts, test_details td where ts.tid =td.id

但是我得到了多行。这是 SQLFiddle演示

最佳答案

只要 test_details 不是临时表,您就可以执行以下操作:

SELECT ts.tid, ts.startdate, ts.enddate, ts.status,
t1.test_status Test1,
t2.test_status Test2,
t3.test_status Test3
FROM transaction ts
LEFT JOIN test_details t1 ON (t1.tid=ts.tid AND t1.test_name='Test1')
LEFT JOIN test_details t2 ON (t2.tid=ts.tid AND t2.test_name='Test2')
LEFT JOIN test_details t3 ON (t3.tid=ts.tid AND t3.test_name='Test3');

这是假设 transaction.tid 是唯一的并且 test_details 中的 (tid, test_name) pair 是唯一的。

编辑: 回复 OP 评论 “它正在工作,但在大型数据库上速度很慢” 我建议将索引添加到 test_details.tidtest_details.test_name:

ALTER TABLE test_details ADD INDEX (tid);
ALTER TABLE test_details ADD INDEX (test_name);

此外,如果已知所有事务都存在所有三个测试,您可能希望使用 JOIN 而不是 LEFT JOIN

SELECT ts.tid, ts.startdate, ts.enddate, ts.status,
t1.test_status Test1,
t2.test_status Test2,
t3.test_status Test3
FROM transaction ts
JOIN test_details t1 ON (t1.tid=ts.tid AND t1.test_name='Test1')
JOIN test_details t2 ON (t2.tid=ts.tid AND t2.test_name='Test2')
JOIN test_details t3 ON (t3.tid=ts.tid AND t3.test_name='Test3');

关于mysql - 使用MySQL从一行中的两个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32349899/

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