mysql - SQL 查询 - 提取带有空值的查询

标签 mysql sql xamarin xamarin.forms

我目前正在通过 Azure 使用 API 连接到我的应用程序。我正在运行一个查询,该查询填充用户药物的 ListView 。用户可以选择是否在用药的同时添加诊断信息。如果用户添加药物和诊断,则查询成功并将填充数据库和 ListView 。但如果用户没有添加诊断,数据库会成功更新,userdiagnosis 字段为空,但不会显示在应用的 ListView 中。

有什么方法可以允许在查询中运行空值并仍然成功提取数据吗?

这是我当前的查询:

var api = {
// an example of executing a SQL statement directly
get: (request, response, next) => {
    var query = {
        sql: 'SELECT  dbo.usermedication.id, \
        dbo.medicine.id AS medicationid,  \
        dbo.medicine.medname, \
        dbo.usermedication.isactive, \
        dbo.usermedication.reminder, \
        dbo.usermedication.communityfeedback, \
        dbo.usermedication.frequency, \
        dbo.usermedication.directions, \
        dbo.medicine.dosage, \
        dbo.usermedication.datetimetotake,  \
        dbo.userdiagnosis.id as "userdiagnosisid", \
        dbo.diagnosis.id AS diagnosisid, \
        dbo.diagnosis.diagnosistext \
        FROM dbo.usermedication 
        INNER JOIN dbo.medicine ON dbo.usermedication.medicationid = dbo.medicine.id  
        INNER JOIN dbo.userdiagnosis ON dbo.usermedication.userdiagnosisid = dbo.userdiagnosis.id  
        INNER JOIN dbo.diagnosis ON dbo.userdiagnosis.diagnosisid = dbo.diagnosis.id 
        WHERE dbo.usermedication.userid = @userid AND dbo.usermedication.isactive = 1',
        parameters: [
            { name: 'userid', value: request.query.userid }
        ]
    };

    request.azureMobile.data.execute(query)
        .then(function (results) {
            response.json(results);
        });
}

};

module.exports = api;

最佳答案

据我从您给出的问题陈述中了解到,如果用户不添加诊断,则 dbo.diagnosis 表将不会有条目,但 dbo.usermedication 将成功更新。 由于您在这些表上使用了 INNER JOIN,显然该列表不会有,因为 dbo.diagnosis 表中没有匹配的记录。

如果您考虑在 dbo.diagnosis 上使用 LEFT JOIN,那么即使诊断表中的值为 null,您也将能够从 userMedicate 表中获取记录。

如果这是预期的话,请尝试一下。

也许你可以尝试运行如下所示的内容

WITH  (SELECT * FROM dbo.userdiagnosis  
    INNER JOIN dbo.diagnosis ON dbo.userdiagnosis.diagnosisid = dbo.diagnosis.id ) AS diagnosisDetails,
SELECT  dbo.usermedication.id, \
    dbo.medicine.id AS medicationid,  \
    dbo.medicine.medname, \
    dbo.usermedication.isactive, \
    dbo.usermedication.reminder, \
    dbo.usermedication.communityfeedback, \
    dbo.usermedication.frequency, \
    dbo.usermedication.directions, \
    dbo.medicine.dosage, \
    dbo.usermedication.datetimetotake,  \
    DiagnosisDetails.id as "userdiagnosisid", \
    DiagnosisDetails.diagnosistext \
    FROM dbo.usermedication 
    INNER JOIN dbo.medicine ON dbo.usermedication.medicationid = 
dbo.medicine.id  
    LEFT JOIN diagnosisDetails ON dbo.usermedication.userdiagnosisid = diagnosisDetails.id  
    WHERE dbo.usermedication.userid = @userid AND dbo.usermedication.isactive = 1;

关于mysql - SQL 查询 - 提取带有空值的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55277286/

相关文章:

c# - Xamarin Android "namespace SqlConnection does not exist"即使在放置指令之后。 2.如何在本地将安卓应用连接到MSSQL数据库?

mysql - 更正具有相似 attendeeNames 和的记录

php - 如果不存在字段,则 MySQL 插入日期

php - 我怎样才能简化这个关于预订的查询?

php - 更新表模式而不影响 Laravel 中的数据

mysql - Importing 1GO SQL File => ERROR 2013 (HY000) at line 23 : Lost connection to MySQL server during query

sql - 删除临时表(如果存在)

mysql - 如何删除一个表中的记录,该表的主键在另一个表中作为外键引用?

Azure 移动参与 Xamarin 端口

android - Xamarin.Android : How to stop Visual Studio from removing the previous version of the app before deploying