Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查找外键行的列等于某物的行_Mysql_Sql - Fatal编程技术网

Mysql 如何查找外键行的列等于某物的行

Mysql 如何查找外键行的列等于某物的行,mysql,sql,Mysql,Sql,我如何从'trade'表中选择'ticker_id'字段等于'ticker'表中'name'字段等于'MSFT'的行的'id'字段的所有行 “trade.ticker\u id”字段是“ticker.id”字段的外键。 如果我想过滤很多“交易”行,这是一个糟糕的设计吗 mysql> describe ticker; +-------------+--------------+------+-----+---------+----------------+ | Field | T

我如何从'trade'表中选择'ticker_id'字段等于'ticker'表中'name'字段等于'MSFT'的行的'id'字段的所有行

“trade.ticker\u id”字段是“ticker.id”字段的外键。 如果我想过滤很多“交易”行,这是一个糟糕的设计吗

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"