Mysql 如何查找外键行的列等于某物的行
我如何从'trade'表中选择'ticker_id'字段等于'ticker'表中'name'字段等于'MSFT'的行的'id'字段的所有行 “trade.ticker\u id”字段是“ticker.id”字段的外键。 如果我想过滤很多“交易”行,这是一个糟糕的设计吗Mysql 如何查找外键行的列等于某物的行,mysql,sql,Mysql,Sql,我如何从'trade'表中选择'ticker_id'字段等于'ticker'表中'name'字段等于'MSFT'的行的'id'字段的所有行 “trade.ticker\u id”字段是“ticker.id”字段的外键。 如果我想过滤很多“交易”行,这是一个糟糕的设计吗 mysql> describe ticker; +-------------+--------------+------+-----+---------+----------------+ | Field | T
mysql> describe ticker;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(64) | NO | | NULL | |
| long_name | varchar(250) | YES | | NULL | |
| exchange_id | int(11) | YES | MUL | NULL | |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0,00 sec)
mysql> describe trade;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| time | datetime | NO | | NULL | |
| price | float | NO | | NULL | |
| quantity | int(11) | NO | | NULL | |
| source | varchar(64) | YES | | NULL | |
| buyer | varchar(64) | YES | | NULL | |
| seller | varchar(64) | YES | | NULL | |
| initiator | varchar(64) | YES | | NULL | |
| ticker_id | int(11) | YES | MUL | NULL | |
+-----------+-------------+------+-----+---------+----------------+
9 rows in set (0,00 sec)
向我们展示您的一些尝试。这是一个微不足道的
JOIN
。这是一个完美的设计。您的表已正确规范化。任何像样的SQL教程都应该说明如何做到这一点。无论列是否为外键,联接语法都是相同的。从trade.ticker_id=ticker.id,其中ticker.name='MSFT',从trade-internal-JOIN-ticker中选择*;我认为当另一个表是外键时还有另一种方法,即联接速度较慢?由于搜索条件,结果与内部联接相同,因此删除左侧的。这是正确的答案。加入速度不受外键的影响。外键会减慢INSERT语句的速度,但不会降低其他速度。如果ID不是键字段,则JOIN的速度会慢得多。
SELECT * FROM trade TR
LEFT JOIN ticker TI ON TR.ticker_id = TI.id
WHERE TI.name = "MSFT"