有多个if条件时如何进行SQL查询

时间:2019-04-20 05:13:05

标签: sql node.js postgresql

我正在尝试构建一个支持,列出,搜索和过滤器的API。我不确定将where子句放在哪里。

它在某些情况下有效,但在许多情况下无效。例如,当输入正文已进行搜索归档时,它将起作用,但是当您仅应用第二个过滤器(在这种情况下为pan时,则不会)。

const query = {
    text: `
      select master.contact.id,
      master.contact.name
      from
      master.contact
       `
  };
  if (input.search) {
    query.text += ` where
    (master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
  }

  if (input.filters) {
    const {
      isActive,
      pan
    } = input.filters;
    if (isActive !== undefined) {
      query.text += ` where master.contact.isActive = ${isActive}`;
    }

    if (pan) {
      query.text += `and master.contact.pan = ${pan}`;
    }

1 个答案:

答案 0 :(得分:1)

有多种方法可以执行此操作。其中之一就是拥有

Where 1=1

在您的主要查询中。因此,您可以为每个条件添加And条件。

const query = {
text: `
  select master.contact.id,
  master.contact.name
  from
  master.contact
  where 1=1
  `
}; 

If (input.search) { 
  query.text += ` and (master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
}

依此类推...