mysql - 我想在 MySQL 中做的事情

标签 mysql sql relationship

我从网站上抓取了大量数据,并精心设计了对我来说有意义的表格结构。

现在,我正在尝试根据关系将这些数据分组。 所以我有一张 table ,里面装满了 coin_a,用于进行 coin_b 交易。

OPEN_TRADES: coin_id_a coin_id_b exchange_id action_type price amount time

我想做的是将硬币表中的数据与 id_a 和 id_b 连接起来。

COINS: id name short_name

我从这个开始:

SELECT `op`.`coin_id_a`, `op`.`coin_id_b`, `op`.`exchange_id`,
    `op`.`action_type`, `op`.`price`, `op`.`amount`, `op`.`time`,
    `c`.`name` , `c`.`short_name`
    FROM `open_trades` as `op`
        LEFT JOIN `coins` as `c`
            ON `op`.`coin_id_a`=`c`.`id`

这完全符合我的预期。但它只解决了我想要的一半数据。 我想再次对 coin_id_b 执行此连接。

我只是没有在 MySQL 中执行此操作的适当工具。坦白说,这让我很烦恼:D

我知道我可以在 php 中做到这一点,事实上我就是这样做的。问题是它在 php 中效率不高。 我知道我的数据库会更快地完成此操作。特别是因为我的交易表在内存中运行。

我想要创建的结果架构如下所示:

coin_id_a coin_id_b exchange_id action_type price amount time id_a name_a
short_name_a id_b name_b short_name_b
<小时/>

将同一个表中的 2 个单独行连接到 mysql 中另一个表中的两个单独字段的正确方法是什么?

最佳答案

What is the proper way to join 2 separate rows from the same table onto two separate fields in another table in mysql?

为该表提供两个不同的别名,并为所选列提供唯一的别名。

根据您的架构,它可能如下所示:

SELECT
      op.coin_id_a, op.coin_id_b, op.exchange_id,
      op.action_type, op.price, op.amount, op.time,
      coin_a.id AS id_a, coin_a.name AS name_a, coin_a.short_name AS short_name_a,
      coin_b.id AS id_b, coin_b.name AS name_b, coin_b.short_name AS short_name_b
FROM open_trades AS op
LEFT JOIN coins AS coin_a
 ON op.coin_id_a = coin_a.id
LEFT JOIN coins AS coin_b
 ON op.coin_id_b = coin_b.id
<小时/>

评论中的评论:

If I give the table i'm joining from two separate aliases I can use it twice. A hundred times.

我意识到这是开玩笑,但这里有一个琐碎的事实:在 MySQL 中,你不能在一个查询中有一百个连接,有一个内置的 limit of 61 table in a single query .

关于mysql - 我想在 MySQL 中做的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348325/

相关文章:

php - 慢速 SQL 查询 - 找不到

mysql - MySQL 限制 TIMESTAMP 范围的解决方法?

mysql - 检查申请中的注册数量

mysql - 计算 MySQL 5.6 中重叠日期范围的最大数量

mysql - 有没有更简单的方法来执行此查询

Grails - 多对象数据库关系

php - 在 PHP 中打印 MySQL 查询

mysql - .net 异常 已经有一个与此连接关联的打开的 DataReader,必须先将其关闭

sql - 两列上的 PSQL 唯一约束

ruby-on-rails - Rails 通过缺少列命名空间 has_many