Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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
MySQL:多个表上的多列联接_Sql_Mysql_Join_Unions - Fatal编程技术网

MySQL:多个表上的多列联接

MySQL:多个表上的多列联接,sql,mysql,join,unions,Sql,Mysql,Join,Unions,我有几个要加入的表,需要添加另一个表,但似乎无法获得正确的查询。这是我现在拥有的- 表1 carid、catid、makeid、modelid、caryear 表2 makeid,makename 表3 modelid,modelname 表4 catid,catname 我用于加入这些的查询是: SELECT * FROM table1 a JOIN table2 b on a.makeid=b.makeid JOIN table3 c on a.modelid=c.modelid

我有几个要加入的表,需要添加另一个表,但似乎无法获得正确的查询。这是我现在拥有的-

表1
carid、catid、makeid、modelid、caryear

表2
makeid,makename

表3
modelid,modelname

表4
catid,catname

我用于加入这些的查询是:

SELECT * FROM table1 a
  JOIN table2 b on a.makeid=b.makeid
  JOIN table3 c on a.modelid=c.modelid
  JOIN table4 d on a.catid=d.catid
  WHERE a.carid = $carid;
现在我需要添加第五个表,这是我从第三方获得的,我很难将其添加到现有查询中。新表包含以下字段-

表5 id、年份、品牌、型号、城市标志、hwympg


我需要基于表1中的caryear、表2中的makename和表3中的modelname的citympg和hwympg。我知道我可以用这些值进行第二次查询,但我更愿意进行一次查询,并将所有数据放在一行中。这可以在单个查询中完成吗?如果是,怎么做?

连接中可能有多个条件。 这行吗

SELECT a.*, e.citympg, e.hwympg
FROM table1 a
  JOIN table2 b on a.makeid=b.makeid
  JOIN table3 c on a.modelid=c.modelid
  JOIN table4 d on a.catid=d.catid
  Join table5 e on b.makename = e.make
                and c.modelname = e.model
                and a.caryear = e.year
  WHERE a.carid = $carid;

…虽然你的问题不清楚。您是只想将table5连接到其他表中,还是想对table5执行其他操作?

如果没有索引,它将不会有效率,但您可以这样做

LEFT JOIN table5 ON (table2.make = table5.make AND table3.model = table5.model AND table1.caryear = table5.caryear)

这还假设make、models和years字符串完全匹配

同意,我想你可能会有麻烦,如果名字像一个是“护送”,另一个是“护送”,第三个是“护送”(结尾的空格)。您可能需要修剪空白并转换为大写或小写进行比较。品牌和型号都显示为下拉选择,并且在插入表中之前将其规范化,这样有助于最大限度地减少匹配问题。@Jim Garrison:Whoops,我想现在已经修好了。我想沮丧是指a.caryear=e.year上的
,而不是a.citympg=e.citympg和a.hwympg=e.hwympg上的
。@ypercube:呃,是的。。。我就是这个意思!这是可行的,但现在我有一个新问题。新表有我们不使用的附加条件,因此查询返回几行。理想情况下,我希望得到一个具有平均citympg和hwympg的单行。在mpgs表中,year/make/model不是唯一的,有第四个条件(引擎大小),因此此查询会为每个引擎大小返回一行。如果表上没有匹配项,我也不会返回任何行。我问了一个后续问题,在这里得到了正确的答案-