MySQL查询中的外键

时间:2015-04-08 08:43:27

标签: mysql indexing

有人可以帮我理解如何在MySQL Query中使用外键吗? 假设我有两张桌子

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和案例表中的case_id

因为在我的网站上,用户总是只按VIN号码进行搜索,例如查询可以查看DATE的情况如何?

现在我的查询如下:

SELECT * FROM VinDatabase WHERE vin = :vin

从我获取case_id,然后创建新查询:

SELECT * FROM cases WHERE case_id = :case_id

有没有更好的方法呢? 如果VIN / case_id不是unqe,那么查询将如何?

修改 如何在过程网站上运作:

  1. 用户进入页面并将VIN添加到输入(让我们说ABCDEFG)
  2. 服务器获取VIN并需要在VINDatabase表中找到case_id
  3. 使用case_id,它将搜索到案例表。
  4. VinDatabase和案例表
  5. 的输出

1 个答案:

答案 0 :(得分:1)

您可以在这两个表上执行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;