在动态列上左联接

时间:2019-06-23 15:41:14

标签: mysql

我有两个桌子。包含一个字段season_start和season_end的字段,它们是整数(1-12)。

我的第二个表中有一列称为month的列,其中还包含整数(1-12),另一列称为season的列,其中包含与每个月相关的相关季节。

我可以成功地加入这两个表并检索与之相关的开始和结束季节,但也希望在中间找到该季节(如果适用)。

我当前的代码是:

"SELECT * FROM `table1` as m 
LEFT JOIN `table2` as s 
ON m.season_start=s.month 
OR m.season_end=s.month
WHERE latin IS NOT NULL 
$qFilters 
GROUP BY latin 
ORDER BY common ASC 
".$limit." ";

这可能吗?我以为我可能需要先运行一个单独的查询?

1 个答案:

答案 0 :(得分:0)

您可以在m.season_start和m.season_end之间使用 在JOIN子句

SELECT * 
FROM `table1` as m 
LEFT JOIN `table2` as s  ON s.month between m.season_start AND  m.season_end
WHERE latin IS NOT NULL 
........

无论如何,您不应该在SQL代码中使用php var,以免出现sqlinjection的风险

并且正如Raymond Nijland所建议的那样,您不应该使用没有聚合功能的分组方式(这对于mysql <5.7产生不可预料的结果,并且默认情况下对于mysql> = 5.7产生错误)