MySQL 查询中的外键
Foreign key in MySQL query
有人可以帮助我了解如何在 MySQL 查询中使用外键吗?
假设我有 2 tables
table VinDatabase
+-------+----------+------------+
| case_id| car_model| vin |
+-------+----------+------------+
| 1 | VW | ABCDEFG |
+-------+----------+------------+
| 2 | VW | GFEDCBA |
+-------+----------+------------+
table cases
+-------+----------+------------+
|case_id| date | price |
+-------+----------+------------+
| 1 |08.04.2015| 11000 |
+-------+----------+------------+
| 2 |02.03.2015| 7000 |
+-------+----------+------------+
使用 INDEX:VinDatabase 中的 VIN table 和 case_id table
因为在我的网站上,用户总是仅通过 VIN 号码进行搜索,例如,如何查询才能到达 DATE?
现在我的查询如下所示:
SELECT * FROM VinDatabase WHERE vin = :vin
从那里得到 case_id 然后进行新查询:
SELECT * FROM cases WHERE case_id = :case_id
有什么更好的方法吗?
另外,如果 VIN / case_id 不是唯一的,查询会是什么样子?
编辑:
它是如何从过程站点工作的:
- 用户进入页面并将 VIN 添加到输入中(比方说 ABCDEFG)
- 服务器获取 VIN 并需要在 VINDatabase table
中找到 case_id
- 使用 case_id 搜索案例 table。
- VinDatabase 和案例的输出table
你可以像这样在两个表上做一个JOIN
:
SELECT * FROM vinDatabase v INNER JOIN cases c
ON v.case_id = c.case_id
WHERE v.vin = 'ABCDEFG' AND c.case_id = 1
输出:
+--------+----------+------------+----------+------------+
| case_id| car_model| vin | date | price |
+--------+----------+------------+----------+------------+
| 1 | VW | ABCDEFG |08.04.2015| 11000 |
+--------+----------+------------+----------+------------+
更新:
如果对于一个给定的 VIN 号码存在多个记录,您将不得不修改查询以返回单个结果。要获取给定 VIN 编号的最新单个条目(可能有多个案例),您可以使用:
SELECT * FROM vinDatabase v INNER JOIN cases c
ON v.case_id = c.case_id
WHERE v.vin = 'ABCDEFG'
ORDER BY c.date DESC
LIMIT 1;
有人可以帮助我了解如何在 MySQL 查询中使用外键吗? 假设我有 2 tables
table VinDatabase
+-------+----------+------------+
| case_id| car_model| vin |
+-------+----------+------------+
| 1 | VW | ABCDEFG |
+-------+----------+------------+
| 2 | VW | GFEDCBA |
+-------+----------+------------+
table cases
+-------+----------+------------+
|case_id| date | price |
+-------+----------+------------+
| 1 |08.04.2015| 11000 |
+-------+----------+------------+
| 2 |02.03.2015| 7000 |
+-------+----------+------------+
使用 INDEX:VinDatabase 中的 VIN table 和 case_id table
因为在我的网站上,用户总是仅通过 VIN 号码进行搜索,例如,如何查询才能到达 DATE?
现在我的查询如下所示:
SELECT * FROM VinDatabase WHERE vin = :vin
从那里得到 case_id 然后进行新查询:
SELECT * FROM cases WHERE case_id = :case_id
有什么更好的方法吗? 另外,如果 VIN / case_id 不是唯一的,查询会是什么样子?
编辑: 它是如何从过程站点工作的:
- 用户进入页面并将 VIN 添加到输入中(比方说 ABCDEFG)
- 服务器获取 VIN 并需要在 VINDatabase table 中找到 case_id
- 使用 case_id 搜索案例 table。
- VinDatabase 和案例的输出table
你可以像这样在两个表上做一个JOIN
:
SELECT * FROM vinDatabase v INNER JOIN cases c
ON v.case_id = c.case_id
WHERE v.vin = 'ABCDEFG' AND c.case_id = 1
输出:
+--------+----------+------------+----------+------------+
| case_id| car_model| vin | date | price |
+--------+----------+------------+----------+------------+
| 1 | VW | ABCDEFG |08.04.2015| 11000 |
+--------+----------+------------+----------+------------+
更新:
如果对于一个给定的 VIN 号码存在多个记录,您将不得不修改查询以返回单个结果。要获取给定 VIN 编号的最新单个条目(可能有多个案例),您可以使用:
SELECT * FROM vinDatabase v INNER JOIN cases c
ON v.case_id = c.case_id
WHERE v.vin = 'ABCDEFG'
ORDER BY c.date DESC
LIMIT 1;