背景:我使用MySQL和InnoDB作为引擎和PDO来执行SQL。
我不熟悉外键,但我有一个customers
数据表,其中包含suffix_id
字段,此表中的suffix_id
字段引用了id
字段一个suffix
数据表。我被告知这样做的原因是,名称的后缀很可能是重复值,并且具有外键约束应该可以提高性能。
我不明白的是如何从id
表中获取suffix
值。我知道如何执行这样的SQL查询的唯一方法是:
SELECT `id` FROM `suffix` WHERE `description` = ?
然后将该查询中的值作为单独的命令传递给我的“真实”查询:
SELECT ... FROM `customers` WHERE ... AND `suffix_id` = [value from earlier query]
但对我来说,运行两个单独的命令似乎效率低下。是否有另一种方法来获取外键应该在与我的“真实”查询相同的查询中引用的id值?
答案 0 :(得分:0)
SELECT b.id
FROM `customers` a INNER JOIN `suffix` b ON a.suffix_id = b.id
WHERE suffix_id = some_value;
您需要查找用于组合表格的JOINS概念:https://dev.mysql.com/doc/refman/5.7/en/join.html
答案 1 :(得分:0)
由于您正在实施搜索,因此您可能需要LIKE
,并且您还可以将这两个查询合并为一个:
SELECT customer.*
FROM customer
INNER JOIN suffix ON suffix.id = customer.suffix_id
WHERE suffix.description LIKE ?
将取决于LIKE
的严格程度。