我有一个名为engrams
的表,其中有列
mat_name1, mat_name2, mat_name3, mat_name4
与列resources
上的表id
有关系。
我有这个SQL语句
SELECT *
FROM engrams
INNER JOIN resources ON engrams.mat_name1 = resources.id
如何为其他mat_name
添加resources.id
列,如何为每个res_name
从resources
表中回显mat_name
列?>
答案 0 :(得分:2)
您需要将JOIN
表engrams
到resources
表四次,每种材料名称一次。由于JOIN
表的每个resources
都有相似的列名,因此您可能需要在应用程序框架中使用别名来区分它们:
SELECT e.name,
e.description,
e.mat_name1, r1.res_name AS res_name1, r1.description AS res_descr1,
e.mat_name2, r2.res_name AS res_name2, r2.description AS res_descr2,
e.mat_name3, r3.res_name AS res_name3, r3.description AS res_descr3,
e.mat_name4, r4.res_name AS res_name4, r4.description AS res_descr4
FROM engrams e
LEFT JOIN resources r1 ON r1.id = e.mat_name1
LEFT JOIN resources r2 ON r2.id = e.mat_name2
LEFT JOIN resources r3 ON r3.id = e.mat_name3
LEFT JOIN resources r4 ON r4.id = e.mat_name4
答案 1 :(得分:1)
如果我正确理解了您的问题,那么您要做的就是在您的OR
子句中添加ON
语句。
SELECT *
FROM engrams
INNER JOIN resources
ON engrams.mat_name1 = resources.id
or engrams.mat_name2 = resources.id
or engrams.mat_name3 = resources.id
or engrams.mat_name4 = resources.id
按原样,该查询将返回字母和资源的所有值。如果您不想要所有内容,只需明确定义要执行的操作,例如:
SELECT resources.res_name, engrams.mat_name1, engrams.mat_name2, engrams.mat_name3,engrams.mat_name4
FROM engrams
INNER JOIN resources
ON engrams.mat_name1 = resources.id
or engrams.mat_name2 = resources.id
or engrams.mat_name3 = resources.id
or engrams.mat_name4 = resources.id
如果“ echo the column”还有其他含义,则必须包括一些示例输出或其他内容。