当IN运算符和BETWEEN值为空时,我们如何使查询返回所有行

时间:2016-06-20 07:24:03

标签: java mysql

我很困惑

我有一个查询,我必须得到一些客户值,将获得一些客户ID作为输入,它看起来像这样

SELECT * FROM CUTOMER WHERE CUTOMER_ID IN ('1','2');

但有时在这种情况下不会选择客户ID,必须返回所有行。

我在开始日期和结束日期之间也有类似的问题,有时会提供开始日期和结束日期,但有时当它们未被选中时我应该返回所有行

有人可以帮我处理案件吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用LEFT JOIN。首先,您必须编写一个返回所有要搜索的值的查询:

SELECT 1 AS CUSTOMER_ID
UNION ALL SELECT 2

(这可以是动态的)然后你可以使用LEFT JOIN:

SELECT
  s.CUSTOMER_ID,
  c.*
FROM
  (SELECT 1 AS CUSTOMER_ID
   UNION ALL SELECT 2) s
  LEFT JOIN CUTOMER c
  ON s.CUSTOMER_ID = c.CUSTOMER_ID

左连接将返回第一个查询中的所有行,并且只返回第二个查询中具有匹配项的行,否则将返回空值。