最干净的连接方式取决于参数

时间:2018-03-08 12:31:10

标签: mysql sql

我正在使用MySQL 5.7,我有一个复杂的查询,其中包含一些可选的过滤参数。 并且连接取决于参数是否来。我认为摘要是:如果有参数,则join(inner)else忽略join。

我已经简化了这个例子,我得到了以下片段:

SELECT * 
FROM commerce cm, commerce_tags cmt
WHERE (? is null or cmt.tag_id = ?) AND 
(? is null or cmt.commerce_id = cm.id)

或者用其他语法:

SELECT *
FROM commerce cm
INNER JOIN commerce_tags cmt ON  (? is null or cmt.tag_id = ?) AND (? is null or cmt.commerce_id = cm.id)

有更清洁和(更有效)的方法吗?也许我让生活变得复杂......

1 个答案:

答案 0 :(得分:0)

从不FROM子句中使用逗号。 始终使用正确,明确,标准的JOIN语法。

我想你想要:

SELECT * 
FROM commerce cm LEFT JOIN
     commerce_tags cmt
     ON cmt.commerce_id = cm.id AND ? is not null
WHERE (? is null or cmt.tag_id = ?);

如果第一个参数不为null,则不运行join