为什么select with case and union返回带有node和sqlite的空数组

时间:2018-11-20 17:26:17

标签: javascript node.js sqlite

我在节点上进行sqlite查询时遇到问题。使用SqliteStudio进行的查询正在运行,但是使用Node.js时,我得到了一个空数组。

以下是查询:

const query =`
    SELECT 'telephone' AS type,telephone AS data,CASE
        WHEN telephone = (
            SELECT data FROM customers_verified_contact_infos
            WHERE type='telephone' AND data=j.telephone AND customer_id = ?
        ) THEN 'true'
        ELSE 'false'
    END AS verified
    FROM customers j WHERE customer_id = ? AND telephone IS NOT NULL
UNION
    SELECT 'email' AS type,email AS data,CASE
        WHEN email = (
            SELECT data FROM customers_verified_contact_infos
            WHERE type='email' AND data=email AND customer_id = ?
        ) THEN 'true'
        ELSE 'false'
    END AS verified
    FROM customers WHERE customer_id = ? AND email IS NOT NULL
UNION
    SELECT 'fax' AS type,fax AS data,CASE
        WHEN fax = (
            SELECT data FROM customers_verified_contact_infos
            WHERE type='fax' AND data=fax AND customer_id = ?
        ) THEN 'true'
        ELSE 'false'
    END AS verified
    FROM customers WHERE customer_id = ? AND fax IS NOT NULL
UNION
    SELECT type,data, 'true' AS verified
    FROM customers_verified_contact_infos WHERE customer_id = ? 
`;

我请求两个表:

  • 具有一些客户信息的客户

  • customers_verified_contact_infos,已验证列表联系信息

联系信息可以在两个表中,也可以仅在一个表中。 结果是包含数据的行的列表,数据的类型以及是否经过验证。

现在,Node.js请求:

db.all(query,[customer_id], (err, data) => {
    console.log(data);
 });

数据是一个空数组,并且err = null。

使用SqliteStudio,使用相同的查询和客户,我得到:

Result

我尝试通过SELECT进行SELECT,但遇到这种情况我没有得到结果。我在互联网上找不到任何可以帮助我的东西。 如果有人可以提供帮助或给我建议,我将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

查询具有7个?占位符,但是数组[customer_id]仅具有一个元素。您需要为每个占位符重复该操作。

db.all(query, Array(7).fill(customer_id), (err, data) => {
    console.log(data);
});