Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL多个列,其中一列作为关系_Sql - Fatal编程技术网

SQL多个列,其中一列作为关系

SQL多个列,其中一列作为关系,sql,Sql,我有一个名为engrams的表,其中包含列 mat_name1, mat_name2, mat_name3, mat_name4 这与列id上的表resources有关 我有这个SQL语句 SELECT * FROM engrams INNER JOIN resources ON engrams.mat_name1 = resources.id 如何使用resources.id添加其他mat\u name列,以及如何从resources表为每个mat\u name回显列res\u nam

我有一个名为
engrams
的表,其中包含列

mat_name1, mat_name2, mat_name3, mat_name4
这与列
id
上的表
resources
有关

我有这个SQL语句

SELECT * 
FROM engrams 
INNER JOIN resources ON engrams.mat_name1 = resources.id
如何使用
resources.id
添加其他
mat\u name
列,以及如何从
resources
表为每个
mat\u name
回显列
res\u name


如果我正确理解了你的问题,那么你所需要做的就是在你的
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”表示其他内容,则必须包含一些示例输出或其他内容。

您需要
工程图
表加入
资源
表4次,每种材料名称一次。由于
resources
表的每个
JOIN
都有相似的列名,因此您可能需要在应用程序框架中使用别名来区分它们:

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

对不起,我不明白你需要什么。看到您的句子,您将得到两个表中的所有列(engrams和resources),这不是您正在寻找的吗?如果没有,您能提供一个示例输出吗?您的示例按我的需要运行,但我必须选择所有列,如何处理这些列?@BogdanGalan我已更新查询以获取所有非
id
值。如果您还需要
id
值,那么添加它们的方法应该非常明显。我总共有23列,是否必须像您的示例中那样添加它们(例如:name、e.description等)?@BogdanGalan您只需按名称手动选择值,并为它们提供别名(如我所做的),其中可能有重叠的名称(即代码<资源> <代码>表中的所有值)。您可以用一个<代码> E*<代码>来替换所有的<代码> E.No.<代码>等。如果您经常查询此数据,可以考虑建立<代码>视图< /C> >,这样您就不必每次都建立这个查询。