有人可以帮我理解如何在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,那么查询将如何?
修改 如何在过程网站上运作:
答案 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;