mysql - 使用三个带有 1000 多个条目的表进行 SELECT

标签 mysql select join

对于交易列表,我需要提供以下列:

  • log_out.timestamp
  • 项目.描述
  • log_out.qty
  • 类别.名称
  • 存储名称
  • log_out.dnr(代表用户id)

log_out 中的表结构如下所示:

| id | timestamp | storageid | itemid | qty | categoryid | dnr |
|    |           |           |        |     |            |     |
| 1  | ........  |     2     |   23   |  3  |     999    | 123 |

正如人们所猜测的,我只将其他表中的相应 ID 存储在该表中。注意:log_out.id 是该表中的主键。

为了获取相应的字符串、整数或其他内容,我尝试了两个查询。

方法 1

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

方法2

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 个虚拟交易。主服务器上的数据库在表中存储了大约 1100 笔以上的交易。这就是麻烦开始的地方。无论我在主机上运行这两种方法中的哪一种,它总是返回 0 行,没有任何错误*叹息*

首先我想,这是因为主机使用MariaDB而不是MySQL。但是当我将远程的 log_out 表导入到我的开发机器后,它的行为与主机相同 -> 返回 0 行,没有错误。

你们知道发生了什么吗?

最佳答案

如果表中有数据,那么它可能与相应表中的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 条记录。该查询中的附加联接将是存在数据差异的联接。

关于mysql - 使用三个带有 1000 多个条目的表进行 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135667/

相关文章:

mysql - 如何在带有负条件的SQL中按 block 进行分组?

php - 如何使用 PHP 将我的 URL 转换为两个可变部分?

mysql - 仅从 MySQL 数据库中选择一个值,以防它只存在一次

database - 如何更改选择输出的格式(SQLite)

mysql - JOIN 具有不同值的键

具有 2 个连接的 MySQL 查询,大 keylen 导致 'Copying to tmp table on disk' 进程永远挂起

python - 在 PyQt5 中的 MySQL 表上执行 QSqlQuery 时出现问题

Mysql 仅当满足条件时才选择列

mysql - 具有两列的内连接

mysql - 如何在mysql中用join替换子查询