编辑:我想我明白了。明天会做进一步测试,我会回到这篇文章。谢谢你们!
我正在尝试查询tbl_invty
上没有表type
中的事务tbl_trans
“空闲”的每个项目的最后一笔交易。交易的多样性使我对我的查询权限感到困惑,而我迄今为止所做的就是加入tbl_invty.code=tbl_trans.code
下面的两个表格。我如何解决此问题,因此我只能根据tbl_invty
列tbl_trans
从code
加入第5行和第8行的第2行和第3行?
tbl_invty
+------+-------------+
| CODE | DESCRIPTION |
+------+-------------+
| 1 | abc |
| 2 | bbb |
| 3 | cdf |
+------+-------------+
tbl_trans
+----------+------+--------+------------+
| TRANS_ID | CODE | TYPE | TRANS_DATE |
+----------+------+--------+------------+
| 1 | 1 | NEW | 2012-09-29 |
| 2 | 1 | UPDATE | 2012-09-30 |
| 3 | 1 | IDLE | 2012-09-30 |
| 4 | 2 | NEW | 2012-09-29 |
| 5 | 2 | UPDATE | 2012-09-30 |
| 6 | 3 | NEW | 2012-09-29 |
| 7 | 3 | UPDATE | 2012-09-30 |
| 8 | 3 | UPDATE | 2012-09-30 |
+----------+------+--------+------------+
答案 0 :(得分:1)
尝试这样的事情:
SELECT i.des, i.code, max(t.trans_id), max(t.date)
FROM tbl_invty i left join tbl_trans t
ON t.code = i.code
WHERE i.code <> 1 AND t.type <> 'IDLE'
GROUP BY i.code;
<强> SQL Fiddle.. 强>
编辑:我只是注意到您要找的内容,请查看:
SELECT i.des, i.code, max(t.trans_id), max(t.date)
FROM tbl_invty i left join tbl_trans t
ON t.code = i.code
where t.code not in (select code from tbl_trans
where type = 'IDLE')
group by i.code;
<强> SQL Fiddle.. 强>
答案 1 :(得分:1)
SELECT tt.*, result.* from tbl_trans tt
INNER JOIN
(SELECT DESCRIPTION, MAX(t.TRANS_ID) as TRANS_ID ,i.`CODE`,
GROUP_CONCAT(t.`TYPE`) TYPES
from tbl_invty i
LEFT JOIN tbl_trans t
ON i.CODE = t.CODE
GROUP BY i.`CODE`
HAVING NOT FIND_IN_SET('IDLE',TYPES)) result
ON tt.TRANS_ID = result.TRANS_ID;
<强> SAMPLE FIDDLE 强>