MySQL-基于键/值查找表转换编码值
我有两个MySQL表。一个包含表单条目,另一个包含要查找的键/值对 其结构如下:MySQL-基于键/值查找表转换编码值,mysql,sql,lookup-tables,Mysql,Sql,Lookup Tables,我有两个MySQL表。一个包含表单条目,另一个包含要查找的键/值对 其结构如下: Table 1 : form_123 id | element_6 | element_7 | element_8 | element_9 1 1 6 3 6 2 4 7 2 4 3 3 3 5
Table 1 : form_123
id | element_6 | element_7 | element_8 | element_9
1 1 6 3 6
2 4 7 2 4
3 3 3 5 2
Table 2 : Options
id | formid | option_id | option_name
1 123 1 sausages
2 123 2 bananas
3 123 3 grapes
4 123 4 fish
5 123 5 bread
6 123 6 buckfast
7 123 7 foo
8 123 8 bar
9 123 9 apples
10 123 10 oranges
提供以下输出的最优雅的MySQL查询是什么。其目的是尽可能通过单个select语句将表格形式_123中的键/值查找代码转换为查找值
id | element_6 | element_7 | element_8 | element_9
1 sausages buckfast grapes buckfast
2 fish foo bananas fish
3 grapes grapes bread bananas
像这样使用内部联接
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
WHERE o6.formid = 123
AND o7.formid = 123
AND o8.formid = 123
AND o9.formid = 123
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123
ORDER BY f.id ASC
顺便说一句,您的示例所需输出似乎不正确
输出
id element_6 element_7 element_8 element_9
1 sausages buckfast grapes buckfast
2 fish foo bananas fish
3 grapes grapes bread bananas
如果您有更多的formid,您可以在所有formid都是123的地方添加
像这样
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
WHERE o6.formid = 123
AND o7.formid = 123
AND o8.formid = 123
AND o9.formid = 123
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123
ORDER BY f.id ASC
或者,您可以在on条件上添加AND formid=123条件,如下所示
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
WHERE o6.formid = 123
AND o7.formid = 123
AND o8.formid = 123
AND o9.formid = 123
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123
ORDER BY f.id ASC
像这样使用内部联接
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
WHERE o6.formid = 123
AND o7.formid = 123
AND o8.formid = 123
AND o9.formid = 123
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123
ORDER BY f.id ASC
顺便说一句,您的示例所需输出似乎不正确
输出
id element_6 element_7 element_8 element_9
1 sausages buckfast grapes buckfast
2 fish foo bananas fish
3 grapes grapes bread bananas
如果您有更多的formid,您可以在所有formid都是123的地方添加
像这样
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
WHERE o6.formid = 123
AND o7.formid = 123
AND o8.formid = 123
AND o9.formid = 123
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123
ORDER BY f.id ASC
或者,您可以在on条件上添加AND formid=123条件,如下所示
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id
INNER JOIN options o7 ON f.element_7 = o7.option_id
INNER JOIN options o8 ON f.element_8 = o8.option_id
INNER JOIN options o9 ON f.element_9 = o9.option_id
WHERE o6.formid = 123
AND o7.formid = 123
AND o8.formid = 123
AND o9.formid = 123
ORDER BY f.id ASC
SELECT f.id,
o6.option_name as element_6,
o7.option_name as element_7,
o8.option_name as element_8,
o9.option_name as element_9
FROM form_123 f
INNER JOIN options o6 ON f.element_6 = o6.option_id AND o6.formid = 123
INNER JOIN options o7 ON f.element_7 = o7.option_id AND o7.formid = 123
INNER JOIN options o8 ON f.element_8 = o8.option_id AND o8.formid = 123
INNER JOIN options o9 ON f.element_9 = o9.option_id AND o9.formid = 123
ORDER BY f.id ASC
已编辑以更正预期输出已编辑以更正预期输出