对于交易清单,我需要提供以下列:
log_out
的表格结构如下所示:
| id | timestamp | storageid | itemid | qty | categoryid | dnr |
| | | | | | | |
| 1 | ........ | 2 | 23 | 3 | 999 | 123 |
可以猜测,我只存储此表中其他表的相应ID。注意:log_out.id
是此表中的主键。
为了得到相应的字符串,int或者其他什么,我尝试了两个查询。
SELECT i.description, c.name, s.name as sname, l.*
FROM items i, categories c, storages s, log_out l
WHERE l.itemid = i.id AND l.storageid = s.id AND l.categoryid = c.id
ORDER BY l.id DESC
SELECT log_out.id, items.description, storages.name, categories.name AS cat, timestamp, dnr, qty
FROM log_out
INNER JOIN items ON log_out.itemid = items.id
INNER JOIN storages ON log_out.storageid = storages.id
INNER JOIN categories ON log_out.categoryid = categories.id
ORDER BY log_out.id DESC
它们在我的开发机器上运行良好,该机器在log_out
中存储了大约99个虚拟事务。主服务器上的DB有类似1100+ tx存储在表中。这就是麻烦开始的地方。无论我在主机上运行这两种方法中的哪一种,它总是返回0行,没有任何错误* 叹息* 。
首先我想,这是因为主机使用MariaDB而不是MySQL。但是在我将远程log_out
表导入我的开发机器后,它与主机一样 - >返回0行没有错误。
你们知道发生了什么事吗?
答案 0 :(得分:2)
如果表中有数据,那么它可能与JOIN
和相应表中的相关记录有关。我将从log_out
表开始,并逐步添加JOIN
中的其他表,例如:
SELECT *
FROM log_out;
SELECT *
FROM log_out
INNER JOIN items ON log_out.itemid = items.id;
SELECT *
FROM log_out
INNER JOIN items ON log_out.itemid = items.id
INNER JOIN storages ON log_out.storageid = storages.id;
SELECT *
FROM log_out
INNER JOIN items ON log_out.itemid = items.id
INNER JOIN storages ON log_out.storageid = storages.id
INNER JOIN categories ON log_out.categoryid = categories.id;
我会逐个执行所有查询,看看哪一个会产生0条记录。该查询中的其他连接将是具有数据差异的连接。
答案 1 :(得分:0)
你的查询对我来说很好,这让我觉得这可能是数据出乎意料的事情。很可能连接中的ID没有正确维护(所有这些都有外键约束吗?)。我会挖掘数据,比如SELECT COUNT(*) FROM items WHERE id IN (SELECT itemid FROM log_out)
等,看看回报是否有意义。对不起,我无法提供更多建议,但如果问题出在数据本身,我会有兴趣听听。